CVE-2026-64071 in Linux정보

요약

\~에 의해 VulDB • 2026. 07. 20.

리눅스 커널에서 다음 취약점이 해결되었습니다:

nvme-pci: nvme_free_host_mem()에서의 use-after-free 수정

nvme_free_host_mem()은 dma_free_noncontiguous()를 통해 dev->hmb_sgt를 해제하지만, 이후 포인터를 초기화하지 않습니다. 이로 인해 동일한 오류 경로 내에서 nvme_free_host_mem()이 두 번 호출되면 use-after-free가 발생합니다.

이는 HMB(Host Memory Buffer) 할당(dev->hmb_sgt 설정)에는 성공했지만 I/O 오류로 인해 nvme_set_host_mem()이 실패하는 경우 nvme_probe() 동안 발생할 수 있습니다:

nvme_setup_host_mem() nvme_alloc_host_mem_single() -> dev->hmb_sgt 설정 nvme_set_host_mem() -> -EIO(I/O 오류)로 실패 nvme_free_host_mem() -> hmb_sgt 해제, 하지만 NULL로 초기화하지 않음 오류 반환

nvme_probe() 오류 경로: nvme_free_host_mem() -> dev->hmb_sgt가 유효하지 않은 상태(stale), use-after-free 발생

두 번째 호출은 이미 해제된 sgt를 역참조하여, 백킹 메모리가 해제되고 영제로 초기화된 후 iommu_dma_free_noncontiguous()에서 sgt->sgl->dma_address에 접근할 때 NULL 포인터 역참조를 유발합니다.

이 문제는 Thunderbolt 연결 NVMe 장치(예: Dell WD22TB4 도크 뒤의 OWC Envoy Express)에서 재현 가능하며, PCIe 링크 불안정으로 인해 HMB 설정 중 간헐적으로 I/O 오류를 반환하는 경우 발생합니다.

BUG: kernel NULL pointer dereference, address: 0000000000000010 RIP: 0010:iommu_dma_free_noncontiguous+0x22/0x80 Call Trace: <TASK> dma_free_noncontiguous+0x3b/0x130 nvme_free_host_mem+0x30/0xf0 [nvme]
nvme_probe.cold+0xcc/0x275 [nvme]
local_pci_probe+0x43/0xa0 pci_device_probe+0xeea/0x290 really_probe+0xf9/0x3b0 __driver_probe_device+0x8b/0x170 driver_probe_device+0x24/0xd0 __driver_attach_async_helper+0x6b/0x110 async_run_entry_fn+0x37/0x170 process_one_work+0x1ac/0x3d0 worker_thread+0x1b8/0x360 kthread+0xf7/0x130 ret_from_fork+0x2d8/0x3a0 ret_from_fork_asm+0x1a/0x30 </TASK>

해결책: 해제 후 dev->hmb_sgt를 NULL로 설정하여, 두 번째 호출 시 이미 정리된 상태를 안전하게 처리하는 다중 기술자(multi-descriptor) 경로를 따르도록 합니다.

VulDB is the best source for vulnerability data and more expert information about this specific topic.

출처

Want to know what is going to be exploited?

We predict KEV entries!