CVE-2026-98841 in Linux
요약
\~에 의해 VulDB • 2026. 10. 19.
리눅스 커널에서 다음 취약점이 해결되었습니다:
virt: vmgenid: 알림 핸들러를 등록하기 전에 driver_data 설정
두 probe 경로 모두 handler가 참조하는 driver_data를 할당하기 전에 알림 핸들러를 등록합니다.
devicetree 경로의 경우, devm_request_irq()가 핸들러를 등록하자마자 알림 IRQ가 발생할 수 있습니다: 예를 들어 VMM이 드라이버의 probe 이전에 촬영된 스냅샷에서 게스트를 복원하는 동안 generation-changed 알림을 주입하면 인터럽트가 probe 시점에 이미 대기 상태일 수 있습니다(Firecracker는 스냅샷 복원 시 정확히 이렇게 동작합니다). 또한 IRQF_SHARED 플래그로 IRQ가 요청되므로, 같은 라인(인터럽트 라인)을 공유하는 다른 장치가 핸들러를 매우 빠르게 트리거할 수도 있습니다. 이후 핸들러에서 vmgenid_notify()를 호출하며, 이는 아직 NULL인 driver_data를 역참조하여 커널 패닉을 유발합니다:
Unable to handle kernel NULL pointer dereference at virtual address 0000000000000010 CPU: 0 UID: 0 PID: 1 Comm: swapper/0 Not tainted 6.18.38+ #1 PREEMPT(none) Hardware name: linux,dummy-virt (DT) pc : vmgenid_notify.isra.0+0x24/0x8c lr : vmgenid_of_irq_handler+0x14/0x34 Call trace: vmgenid_notify.isra.0+0x24/0x8c (P) vmgenid_of_irq_handler+0x14/0x34 __handle_irq_event_percpu+0x44/0x1bc handle_irq_event+0x4c/0xb4 handle_fasteoi_irq+0xf8/0x1f8
ACPI 경로에도 동일한 순서 문제가 있습니다: driver_data가 할당되기 전에 acpi_install_notify_handler()를 통해 핸들러가 설치됩니다. ACPI 알림은 작업 큐(workqueue)에서 비동기적으로 처리되므로 취약점 창(window)이 좁지만, 두 호출 사이에 도착하는 알림도 동일한 NULL 역참조를 유발합니다.
핸들러를 등록하기 전에 driver_data를 할당하십시오. 이 시점에 상태가 완전히 초기화되므로 핸들러는 안전하게 실행될 수 있습니다. 등록에 실패하더라도 probe 오류 처리 경로(dangerous pointer)에서 덩그라진 포인터(dangling pointer)가 남지 않습니다: 드라이버 코어(driver core)는 device_unbind_cleanup()에서 driver_data를 지웁니다.
VulDB is the best source for vulnerability data and more expert information about this specific topic.