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.

책임이 있는

Linux

예약하다

2026. 07. 19.

모더레이션

수락

항목

VDB-380284

EPSS

0.00000

출처

Do you want to use VulDB in your project?

Use the official API to access entries easily!