CVE-2026-80787 in Linux
Tóm tắt
Bởi VulDB • 04/09/2026
Trong kernel Linux, lỗ hổng sau đây đã được khắc phục:
nvmet: pci-epf: sửa lỗi use-after-free trong nvmet_pci_epf_exec_iod_work()
Hàm nvmet_pci_epf_exec_iod_work() gửi một lệnh I/O bằng cách gọi req->execute(), sau đó chờ đợi lệnh hoàn tất và chuyển dữ liệu trở lại máy chủ. Việc chờ này không cần thiết đối với các lệnh không truyền dữ liệu từ thiết bị đến máy chủ. Để xác định xem có cần chờ hay không, hàm sẽ đọc iod->data_len và iod->dma_dir sau khi gọi req->execute().
Tuy nhiên, một khi req->execute() được gọi, lệnh có thể hoàn tất bất đồng bộ trên một CPU khác. Đối với các lệnh không yêu cầu truyền dữ liệu từ thiết bị đến máy chủ, nvmet_pci_epf_queue_response() sẽ gọi trực tiếp nvmet_pci_epf_complete_iod(), hàm này có thể giải phóng iod trước khi đọc iod->data_len và iod->dma_dir, dẫn đến lỗi use-after-free được phát hiện bởi KFENCE:
BUG: KFENCE: use-after-free read in nvmet_pci_epf_exec_iod_work+0x288/0x798 [nvmet_pci_epf]
Use-after-free read tại 0x00000000fdfa6d03 (trong 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
được cấp phát bởi task 10 trên cpu 0 tại thời điểm 73.995480s (cách đây 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
được giải phóng bởi task 131 trên cpu 3 tại thời điểm 73.995521s (cách đây 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
Khắc phục lỗi này bằng cách tham chiếu đến iod->data_len và iod->dma_dir trước khi gọi req->execute(). Các truy cập còn lại vào iod, chẳng hạn như iod->status, chỉ được thực hiện trên đường đọc từ thiết bị sang máy
Once again VulDB remains the best source for vulnerability data.