CVE-2022-48892CWE-415CWE-416

CVE-2022-48892

High · published August 21, 2024

CVSS v3.1
7.8
EPSS
0%
Percentile
15.3
In the wild
Unconfirmed
What it is

In the Linux kernel, the following vulnerability has been resolved:

sched/core: Fix use-after-free bug in dup_user_cpus_ptr()

Since commit 07ec77a1d4e8 ("sched: Allow task CPU affinity to be

restricted on asymmetric systems"), the setting and clearing of

user_cpus_ptr are done under pi_lock for arm64 architecture. However,

dup_user_cpus_ptr() accesses user_cpus_ptr without any lock

protection. Since sched_setaffinity() can be invoked from another

process, the process being modified may be undergoing fork() at

the same time. When racing with the clearing of user_cpus_ptr in

__set_cpus_allowed_ptr_locked(), it can lead to user-after-free and

possibly double-free in arm64 kernel.

Commit 8f9ea86fdf99 ("sched: Always preserve the user requested

cpumask") fixes this problem as user_cpus_ptr, once set, will never

be cleared in a task's lifetime. However, this bug was re-introduced

in commit 851a723e45d1 ("sched: Always clear user_cpus_ptr in

do_set_cpus_allowed()") which allows the clearing of user_cpus_ptr in

do_set_cpus_allowed(). This time, it will affect all arches.

Fix this bug by always clearing the user_cpus_ptr of the newly

cloned/forked task before the copying process starts and check the

user_cpus_ptr state of the source task under pi_lock.

Note to stable, this patch won't be applicable to stable releases.

Just copy the new dup_user_cpus_ptr() function over.

The record
Technical detail
CVSS v3.1
7.8 · HIGH
Vector
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
CVSS v4.0
Not supplied
EPSS
0.00249 · 15.3th percentile
Weaknesses
CWE-415 · Double Free; CWE-416 · Use After Free
Published
2024-08-21T11:15Z
Affected products (2)
ProductVersionsFixed in
linux/linux_kernel≥ 5.15, < 5.15.895.15.89
linux/linux_kernel≥ 5.16, < 6.1.76.1.7
References (3)
EPSS history
Timeline
  • 21 AUG 06:10Z
    sched/core: Fix use-after-free bug in dup_user_cpus_ptr()
    cvelistv5