cgroup/bpf:使用专用工作队列来破坏 cgroup bpf(CVE-2024-53054)
CVE编号
CVE-2024-53054利用情况
暂无补丁情况
N/A披露时间
2024-11-20漏洞描述
在Linux内核中,已经解决了一个关于cgroup/bpf的漏洞。具体描述如下:该漏洞表现为一个hung_task问题,具体表现为某个任务(kworker/0:0:8)被阻塞超过327秒。该问题的调用跟踪显示,在尝试执行cgroup_bpf_release时发生了死锁。这个问题可以通过以下步骤复现:1. 删除大量cpuset cgroup。2. 反复设置cpu的开启和关闭。3. 反复设置watchdog_thresh。脚本可以在上述签名上方提到的链接中获取。问题的原因是cgroup_mutex和cpu_hotplug_lock在不同的任务中被获取,这可能导致死锁。具体步骤如下:1. 大量cpuset被异步删除,将大量cgroup_bpf_release工作放入system_wq。由于system_wq的最大活跃工作数为WQ_DFL_ACTIVE(256),因此所有活跃工作都是cgroup_bpf_release工作,许多cgroup_bpf_release工作会被放入非活跃队列。2. 设置watchdog_thresh会持有cpu_hotplug_lock.read并将smp_call_on_cpu工作放入system_wq。然而,步骤1已经填满了system_wq,'sscs.work'被放入非活跃队列。'sscs.work'需要等待之前放入非活跃队列的工作执行完毕(n个cgroup_bpf_release),因此会被阻塞一段时间。3. CPU离线需要cpu_hotplug_lock.write,这被步骤2阻塞。4. 在步骤1中删除的cpuset会将cgroup_release工作放入cgroup_destroy_wq。它们一直在争夺获取cgroup_mutex。当cgroup_metux被某个工作获取时,它会调用cpuset_css_offline,这需要获取cpu_hotplug_lock.read。然而,cpuset_css_offline会被步骤3阻塞。5. 此时,有256个工作(cgroup_bpf_release)在活跃队列中,它们正在尝试获取cgroup_mutex,结果全部被阻塞。因此,sscs.work无法执行。最终,这种情况导致四个进程被阻塞,形成死锁。为了解决此问题,将cgroup_bpf_release工作放置在一个专用的工作队列上,可以打破循环并解决问题。System wqs是用于各种杂项任务的,不应该产生大量并发工作项。如果某些操作会产生大量工作项,那么应该使用专用工作队列来处理这些工作,以避免上述问题。本次修复方案就是为cgroup_bpf_release分配一个专用的工作队列,以避免死锁问题。解决建议
建议您更新当前系统或软件至最新版,完成漏洞的修复。- 攻击路径 N/A
- 攻击复杂度 N/A
- 权限要求 N/A
- 影响范围 N/A
- 用户交互 N/A
- 可用性 N/A
- 保密性 N/A
- 完整性 N/A
CWE-ID | 漏洞类型 |
Exp相关链接

版权声明
本站原创文章转载请注明文章出处及链接,谢谢合作!
评论