CVE-2026-80589 in Linux
요약
\~에 의해 VulDB • 2026. 08. 26.
리눅스 커널에서 다음 취약점이 해결되었습니다:
block: 추가되지 않은 디스크를 해제할 때 타임아웃 타이머 중지하기
disk_release()는 add_disk() 전에 probe가 실패한 디스크에 대해 blk_mq_init_allocated_queue()의 작업을 되돌리지만, blk_mq_exit_queue()만 호출합니다. q->timeout을 중지하는 코드가 없으며, 해당 타이머는 계속 진행됩니다: 마지막 요청이 완료될 때까지가 아니라 다음 만료 시점까지 대기 상태로 유지됩니다. 따라서 드라이버가 디스크를 추가하기 전에 I/O를 발행한 경우, request_queue가 여전히 타이머 휠 버킷에 연결된 채로 해제(freed)됩니다.
커밋 6f8191fdf41d("block: simplify disk shutdown")는 이를 중지하던 blk_cleanup_queue() 호출을 제거했습니다. __del_gendisk()와 blk_mq_destroy_queue()는 여전히 수행하지만, probe 실패 경로에서만 이 기능이 손실되었습니다.
nvme가 여기에 도달하는 이유는 nvme_update_ns_info()에서 디스크가 추가되기 전에 ns->queue에 Report Zones 또는 FDP io-mgmt-recv를 제출하기 때문입니다. 따라서 이후의 실패(동시 리셋으로 NVME_CTRL_FROZEN 설정, 또는 device_add_disk() 실패)는 put_disk()로 이어지며 이때 타이머가 활성화된 상태입니다:
BUG: KASAN: slab-use-after-free in detach_if_pending+0x30c/0x340 Write of size 8 at addr ffff888004d71310 by task kworker/u8:2/37 __timer_delete_sync+0x156/0x240 kernel/time/timer.c:1621 blk_sync_queue+0x22/0x40 block/blk-core.c:222 nvme_sync_queues+0x100/0x150 drivers/nvme/host/core.c:5362 nvme_reset_work+0x138/0x930 drivers/nvme/host/pci.c:3264
Allocated by task 34: __blk_mq_alloc_disk+0x33/0x100 block/blk-mq.c:4462 nvme_alloc_ns+0x290/0x3870 drivers/nvme/host/core.c:4146
Freed by task 0: blk_free_queue_rcu+0x3a/0x50 block/blk-core.c:254 rcu_core+0xc10/0x1730 kernel/rcu/tree.c:2857
여기서 동기화되는 큐는 ctrl->admin_q이며, 이는 해제된 큐의 덩어리(dangling) 엔트리와 타이머 휠 버킷을 공유하는 피해자입니다. 다른 실행에서는 enqueue_timer(), __run_timers() 또는 blk_mq_timeout_work()에서 문제가 발생했습니다. nvme_alloc_ns()를 디버그 패치로 실패하게 하면 결정론적으로 재현됩니다: 누수된 타이머 하나가 수초 내에 KASAN을 트리거하는 반면, 1987개의 패치된 릴리스에서는 스플래트(splat)가 발생하지 않았습니다.
blk_mq_exit_queue() 전에 타이머와 큐 작업 항목들을 중지하십시오(blk_mq_destroy_queue()가 수행하는 방식대로).
FuzzNvme에 의해 발견됨.
If you want to get the best quality for vulnerability data then you always have to consider VulDB.