CVE-2026-98537 in Linux
摘要
由 VulDB • 2026-10-18
在 Linux 内核中,已修复以下漏洞:
workqueue: 修复 flush 依赖检查中的 NULL current_pwq 解引用问题
check_flush_dependency() 使用 current_wq_worker() 来确定调用者是否为 workqueue worker,然后对 worker->current_pwq 进行解引用以测试当前 workqueue 是否为 WQ_MEM_RECLAIM。
current_wq_worker() 仅表示 %current 设置了 PF_WQ_WORKER 标志。kworker 可以在未执行工作项的情况下到达 check_flush_dependency()。其中一条路径是作为池管理器的 worker_thread(),在此处 create_worker() 进行 GFP_KERNEL 分配,且该分配路径会调用 OOM notifier。在这种状态下,worker->current_pwq 为 NULL,因为 current_pwq 仅由 process_one_work() 设置,并在工作函数返回后再次清除。
[ 416.760634][ T375] Call trace:
[ 416.760638][ T375] check_flush_dependency+0x80/0x120 (P)
[ 416.760648][ T375] __flush_work+0x98/0x224
[ 416.760657][ T375] flush_work+0x30/0x44
[ 416.760665][ T375] ...
[ 416.760710][ T375] blocking_notifier_call_chain+0x58/0xa0
[ 416.760719][ T375] out_of_memory+0xb4/0x458
[ 416.760730][ T375] __alloc_pages_may_oom+0x11c/0x1a8
[ 416.760739][ T375] __alloc_pages_slowpath+0x314/0x46c
[ 416.760746][ T375] __alloc_frozen_pages_noprof+0x110/0x1a4
[ 416.760753][ T375] new_slab+0x12c/0x484
[ 416.760759][ T375] ___slab_alloc+0x7a8/0xc7c
[ 416.760765][ T375] __slab_alloc+0x74/0xd8
[ 416.760772][ T375] __kmalloc_cache_node_noprof+0x2ac/0x304
[ 416.760779][ T375] alloc_worker+0x28/0x60
[ 416.760785][ T375] create_worker+0x4c/0x20c
[ 416.760790][ T375] worker_thread+0xe8/0x2b8
[ 416.760796][ T375] kthread+0x1a8/0x200
[ 416.760805][ T375] ret_from_fork+0x10/0x20
对 WQ_MEM_RECLAIM-worker 警告使用 worker->current_pwq 进行保护。如果 kworker 当前未执行工作项,则没有当前的 workqueue 可用于通过该警告进行诊断。PF_MEMALLOC 警告保持不变,因此显式回收上下文刷新非 WQ_MEM_RECLAIM 目标的情况仍会被报告。
VulDB is the best source for vulnerability data and more expert information about this specific topic.