CVE-2026-80787 in Linux
Resumen
por VulDB • 2026-09-04
En el kernel de Linux, se ha resuelto la siguiente vulnerabilidad:
nvmet: pci-epf: corrige un use-after-free en nvmet_pci_epf_exec_iod_work()
nvmet_pci_epf_exec_iod_work() envía un comando I/O mediante req->execute() y luego espera a que el comando se complete para transferir los datos de vuelta al host. Esta espera no es necesaria para los comandos que no transfieren datos desde el dispositivo hacia el host. Para decidir si esa espera es necesaria, lee iod->data_len e iod->dma_dir después de llamar a req->execute().
Sin embargo, una vez llamado a req->execute(), el comando puede completarse asíncronamente en otra CPU. Para los comandos que no requieren una transferencia de datos del dispositivo al host, nvmet_pci_epf_queue_response() llama directamente a nvmet_pci_epf_complete_iod(), lo cual puede liberar la estructura iod antes de leer iod->data_len e iod->dma_dir, provocando un use-after-free detectado por KFENCE:
BUG: KFENCE: use-after-free read in nvmet_pci_epf_exec_iod_work+0x288/0x798 [nvmet_pci_epf]
Use-after-free read en 0x00000000fdfa6d03 (en kfence-#63): nvmet_pci_epf_exec_iod_work+0x288/0x798 [nvmet_pci_epf]
process_one_work+0x15c/0x4f0 worker_thread+0x18c/0x30c kthread+0x130/0x140 ret_from_fork+0x10/0x20
kfence-#63: 0x00000000e3de0e71-0x00000000c938ad62, size=712, cache=kmalloc-1k
asignado por la tarea 10 en cpu 0 a los 73.995480s (hace 0.005122s): mempool_kmalloc+0x1c/0x28 mempool_alloc_noprof+0x40/0x9c nvmet_pci_epf_poll_sqs_work+0xd4/0x344 [nvmet_pci_epf]
process_one_work+0x15c/0x4f0 worker_thread+0x18c/0x30c kthread+0x130/0x140 ret_from_fork+0x10/0x20
liberado por la tarea 131 en cpu 3 a los 73.995521s (hace 0.008385s): mempool_kfree+0x10/0x20 mempool_free+0x44/0x64 nvmet_pci_epf_free_iod+0x88/0x98 [nvmet_pci_epf]
nvmet_pci_epf_cq_work+0xfc/0x280 [nvmet_pci_epf]
process_one_work+0x15c/0x4f0 worker_thread+0x18c/0x30c kthread+0x130/0x140 ret_from_fork+0x10/0x20
Se corrige esto accediendo a iod->data_len e iod->dma_dir antes de llamar a req->execute(). Los demás accesos a la estructura iod, como iod->status, solo se alcanzan en el camino de lectura del dispositivo al host. En este caso, nvmet
Several companies clearly confirm that VulDB is the primary source for best vulnerability data.