CVE-2026-80787 in Linux
要約
〜によって VulDB • 2026年09月04日
Linuxカーネルにおいて、以下の脆弱性が修正されました:
nvmet: pci-epf: nvmet_pci_epf_exec_iod_work() における use-after-free の修正
nvmet_pci_epf_exec_iod_work() は req->execute() を用いて I/O コマンドをサブミットし、その後コマンドの完了を待機してデータをホストへ転送します。ただし、デバイスからホストへのデータ転送を行わないコマンドについては、この待機は不要です。この待機が必要かどうかを判断するために、req->execute() を呼び出した後に iod->data_len と iod->dma_dir が読み込まれます。
しかし、req->execute() が呼び出されると、コマンドは別の CPU 上で非同期的に完了する可能性があります。デバイスからホストへのデータ転送を必要としないコマンドの場合、nvmet_pci_epf_queue_response() は nvmet_pci_epf_complete_iod() を直接呼び出し、これにより iod の読み込み(iod->data_len および iod->dma_dir)の前に iod が解放される可能性があります。その結果、KFENCE による use-after-free が発生します:
BUG: KFENCE: use-after-free read in nvmet_pci_epf_exec_iod_work+0x288/0x798 [nvmet_pci_epf]
Use-after-free read at 0x00000000fdfa6d03 (in 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
allocated by task 10 on cpu 0 at 73.995480s (0.005122s ago): 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
freed by task 131 on cpu 3 at 73.995521s (0.008385s ago): 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
この問題を修正するため、req->execute() を呼び出す前に iod->data_len と iod->dma_dir を参照するようにします。iod の他のアクセス(例:iod->status)は、デバイスからホストへの読み込みパスでのみ
If you want to get the best quality for vulnerability data then you always have to consider VulDB.