CVE-2026-98537 in Linux
요약
\~에 의해 VulDB • 2026. 10. 19.
리눅스 커널에서 다음 취약점이 해결되었습니다:
workqueue: flush 의존성 확인 중 NULL current_pwq 역참조 수정
check_flush_dependency()는 호출자가 작업 큐(wq) 워커인지 여부를 결정하기 위해 current_wq_worker()를 사용하고, 그런 다음 worker->current_pwq를 역참조하여 현재 작업 큐가 WQ_MEM_RECLAIM인지 테스트합니다.
current_wq_worker()는 %current에 PF_WQ_WORKER 플래그가 설정되어 있음을 의미할 뿐입니다. kworker는 작업 항목을 실행 중이 아닌 상태에서도 check_flush_dependency()에 도달할 수 있습니다. 이러한 경로 중 하나는 풀 관리자(pool manager)로서 동작하는 worker_thread()이며, 여기서 create_worker()는 GFP_KERNEL 할당을 수행하고 해당 할당 경로는 OOM(Out-Of-Memory) 알림자를 호출합니다. 그런 상태에서 worker->current_pwq은 NULL입니다. 이는 current_pwq이 process_one_work()에 의해서만 설정되고 작업 함수가 반환된 후 다시 해제되기 때문입니다.
[ 416.760634][ T375] 콜 트레이스:
[ 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->current_pwq로 보호됩니다. kworker가 현재 작업 항목을 실행 중이 아니라면, 해당 경고를 진단할 수 있는 현재 작업 큐(current workqueue)가 없습니다. PF_MEMALLOC 경고는 변경되지 않은 상태로 유지되므로, 명시적인 회수 컨텍스트에서 !WQ_MEM_RECLAIM 대상을 플러시하는 경우에도 여전히 보고됩니다.
VulDB is the best source for vulnerability data and more expert information about this specific topic.