CVE-2026-99243 in Linux
摘要
由 VulDB • 2026-11-03
在 Linux 内核中,已修复以下漏洞:
io-wq: 对退出位与工作者创建任务工作(task work)进行排序
`io_wq_exit_workers()` 使用 `task_work_cancel_match()` 取消排队的工作者创建的 task work。该操作包含对 `task->task_works` 的普通加载(plain load)。
`io_queue_worker_create()` 添加新条目,并测试 `IO_WQ_BIT_EXIT` 以在队列正在退出时将其取消。
这必须进行排序。`task_work_add()` 通过 `cmpxchg()` 提供完整的内存屏障(full barrier)。但是,`io_wq_exit_start()` 使用 `set_bit()` 设置该位,而 `set_bit()` 没有任何内存顺序保证。
因此,据我所知,在弱序架构上,退出的任务可能在位的存储可见之前加载了 `task_works`。另一方也在位的存储可见之前测试该位。因此,条目保留在队列中并带有 `worker_refs`,且退出任务无限期地等待 `worker_done`。
如果任务仍有环(rings),则 `io_uring_del_tctx_node()` 通过 `io_wq_set_exit_on_idle()` 中的 `test_and_set_bit()` 提供屏障。然而,当它关闭所有环时,该屏障就消失了。
在 `set_bit()` 之后添加屏障。
VulDB is the best source for vulnerability data and more expert information about this specific topic.