CVE-2026-64424 in Linux
요약
\~에 의해 VulDB • 2026. 07. 25.
리눅스 커널에서 다음 취약점이 해결되었습니다:
netpoll: 종료 경로에서의 use-after-free 오류 수정
KASAN을 통해 명확하게 감지되는 netpoll의 use-after-free 오류가 존재합니다.
BUG: KASAN: slab-use-after-free in _raw_spin_lock_irqsave+0x3b/0x80 Read of size 1 at addr ... by task kworker/9:1 Workqueue: events queue_process Call Trace: skb_dequeue+0x1e/0xb0 queue_process+0x2c/0x600 process_scheduled_works+0x4b6/0x850 worker_thread+0x414/0x5a0 Allocated by task 242: __netpoll_setup+0x201/0x4a0 netpoll_setup+0x249/0x550 enabled_store+0x32f/0x380 Freed by task 0: kfree+0x1b7/0x540 rcu_core+0x3f8/0x7a0
이 문제는 정리(cleanup) 경로와 병렬로 대기 중인 TX 작업자(worker)가 실행될 때 발생합니다.
netpoll 종료 경로에서 발생하는 과정은 다음과 같습니다:
1) __netpoll_cleanup() 호출 2) dev->npinfo를 NULL로 설정 3) rcu_cleanup_netpoll_info()를 사용하여 call_rcu() 호출 3.1) rcu_cleanup_netpoll_info()는 cancel_delayed_work()를 통해 모든 작업자를 취소하려고 시도하지만, 작업자 완료를 기다리지는 않음 4) kfree(npinfo);
주석에서 언급한 바와 같이 "softirq 상태이므로 여기서 cancel_delayed_work_sync()를 호출할 수 없다"고 하여 3.1)은 작업을 실제로 취소하지 않으므로, TX 작업자가 단계 4 이후에도 실행될 수 있습니다.
Tl;DR: queue_process()는 RCU 리더가 아니며, container_of()를 통해 워크 항목을 거쳐 npinfo에 접근합니다.
작업자가 완전히 중지되고 향후 재설정(re-arming) 시도가 방지되도록 disable_delayed_work_sync()를 사용합니다. npinfo가 NULL로 설정되면 송신자는 중단되어 새 작업을 큐에 추가하지 않습니다. 비활성화(disable) 플래그는 진행 중인 모든 재설정 시도도 조용히 실패하도록 보장합니다.
향후에는 npinfo->rcu rcu_head이 필요 없이 여기서 인라인으로 정리를 수행할 수 있지만, 이는 net-next 관련 사항입니다.
If you want to get the best quality for vulnerability data then you always have to consider VulDB.