CVE-2026-64071 in Linux
Сводка
по VulDB • 20.07.2026
В ядре Linux устранена следующая уязвимость:
nvme-pci: исправлена ошибка use-after-free в функции nvme_free_host_mem()
Функция nvme_free_host_mem() освобождает память, на которую указывает dev->hmb_sgt, через вызов dma_free_noncontiguous(), но после этого не обнуляет указатель. Это приводит к ошибке use-after-free при повторном вызове nvme_free_host_mem() в том же пути обработки ошибок.
Такая ситуация может возникнуть во время выполнения nvme_probe(), когда nvme_setup_host_mem() успешно выделяет память для HMB (устанавливая dev->hmb_sgt), но nvme_set_host_mem() завершается с ошибкой ввода-вывода:
nvme_setup_host_mem() nvme_alloc_host_mem_single() -> устанавливает dev->hmb_sgt nvme_set_host_mem() -> завершается с ошибкой -EIO nvme_free_host_mem() -> освобождает hmb_sgt, но НЕ обнуляет его возврат ошибки
Путь обработки ошибок в nvme_probe(): nvme_free_host_mem() -> dev->hmb_sgt содержит устаревшее значение (stale), возникает use-after-free
Второй вызов разыменовывает уже освобожденную структуру sgt, что приводит к разыменованию нулевого указателя в функции iommu_dma_free_noncontiguous() при обращении к sgt->sgl->dma_address (поддерживающая память была освобождена и очищена до нуля).
Проблему можно воспроизвести на устройствах NVMe, подключенных через Thunderbolt (например, OWC Envoy Express за док-станцией Dell WD22TB4), где устройство периодически возвращает ошибки ввода-вывода во время настройки HMB из-за нестабильности соединения PCIe.
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 path), который безопасно обрабатывает уже очищенное состояние.
Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.