CVE-2024-43853
Severity CVSS v4.0:
Pending analysis
Type:
CWE-416
Use After Free
Publication date:
17/08/2024
Last modified:
03/11/2025
Description
In the Linux kernel, the following vulnerability has been resolved:<br />
<br />
cgroup/cpuset: Prevent UAF in proc_cpuset_show()<br />
<br />
An UAF can happen when /proc/cpuset is read as reported in [1].<br />
<br />
This can be reproduced by the following methods:<br />
1.add an mdelay(1000) before acquiring the cgroup_lock In the<br />
cgroup_path_ns function.<br />
2.$cat /proc//cpuset repeatly.<br />
3.$mount -t cgroup -o cpuset cpuset /sys/fs/cgroup/cpuset/<br />
$umount /sys/fs/cgroup/cpuset/ repeatly.<br />
<br />
The race that cause this bug can be shown as below:<br />
<br />
(umount) | (cat /proc//cpuset)<br />
css_release | proc_cpuset_show<br />
css_release_work_fn | css = task_get_css(tsk, cpuset_cgrp_id);<br />
css_free_rwork_fn | cgroup_path_ns(css->cgroup, ...);<br />
cgroup_destroy_root | mutex_lock(&cgroup_mutex);<br />
rebind_subsystems |<br />
cgroup_free_root |<br />
| // cgrp was freed, UAF<br />
| cgroup_path_ns_locked(cgrp,..);<br />
<br />
When the cpuset is initialized, the root node top_cpuset.css.cgrp<br />
will point to &cgrp_dfl_root.cgrp. In cgroup v1, the mount operation will<br />
allocate cgroup_root, and top_cpuset.css.cgrp will point to the allocated<br />
&cgroup_root.cgrp. When the umount operation is executed,<br />
top_cpuset.css.cgrp will be rebound to &cgrp_dfl_root.cgrp.<br />
<br />
The problem is that when rebinding to cgrp_dfl_root, there are cases<br />
where the cgroup_root allocated by setting up the root for cgroup v1<br />
is cached. This could lead to a Use-After-Free (UAF) if it is<br />
subsequently freed. The descendant cgroups of cgroup v1 can only be<br />
freed after the css is released. However, the css of the root will never<br />
be released, yet the cgroup_root should be freed when it is unmounted.<br />
This means that obtaining a reference to the css of the root does<br />
not guarantee that css.cgrp->root will not be freed.<br />
<br />
Fix this problem by using rcu_read_lock in proc_cpuset_show().<br />
As cgroup_root is kfree_rcu after commit d23b5c577715<br />
("cgroup: Make operations on the cgroup root_list RCU safe"),<br />
css->cgroup won&#39;t be freed during the critical section.<br />
To call cgroup_path_ns_locked, css_set_lock is needed, so it is safe to<br />
replace task_get_css with task_css.<br />
<br />
[1] https://syzkaller.appspot.com/bug?extid=9b1ff7be974a403aa4cd
Impact
Base Score 3.x
5.50
Severity 3.x
MEDIUM
Vulnerable products and versions
| CPE | From | Up to |
|---|---|---|
| cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 4.6 (including) | 6.1.103 (excluding) |
| cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 6.2 (including) | 6.6.44 (excluding) |
| cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 6.7 (including) | 6.10.3 (excluding) |
To consult the complete list of CPE names with products and versions, see this page
References to Advisories, Solutions, and Tools
- https://git.kernel.org/stable/c/10aeaa47e4aa2432f29b3e5376df96d7dac5537a
- https://git.kernel.org/stable/c/1be59c97c83ccd67a519d8a49486b3a8a73ca28a
- https://git.kernel.org/stable/c/27d6dbdc6485d68075a0ebf8544d6425c1ed84bb
- https://git.kernel.org/stable/c/29a8d4e02fd4840028c38ceb1536cc8f82a257d4
- https://git.kernel.org/stable/c/29ac1d238b3bf126af36037df80d7ecc4822341e
- https://git.kernel.org/stable/c/4e8d6ac8fc9f843e940ab7389db8136634e07989
- https://git.kernel.org/stable/c/688325078a8b5badd6e07ae22b27cd04e9947aec
- https://git.kernel.org/stable/c/96226fbed566f3f686f53a489a29846f2d538080
- https://lists.debian.org/debian-lts-announce/2024/10/msg00003.html
- https://lists.debian.org/debian-lts-announce/2025/01/msg00001.html



