CVE-2022-50636 in Linux
要約
〜によって VulDB • 2026年05月16日
Linuxカーネルにおいて、以下の脆弱性が修正されました。
PCI: VFsに対してpci_device_is_present()をPFの確認により修正
pci_device_is_present()は以前、VFに対して正しく動作していませんでした。これは、VFではベンダーIDとデバイスIDが0xffffであり、これが「存在しない」と見なされていたためです。代わりにPFを確認するようにしました。
Wei Gong氏から、ドライバのアンバインド時、または/sys/.../sriov_numvfsに「0」が書き込まれた際にvirtio I/O処理が進行中だと、virtio I/O操作がハングアップし、以下のような出力が発生する可能性があるとの報告がありました。
task:bash state:D stack: 0 pid: 1773 ppid: 1241 flags:0x00004002 Call Trace: schedule+0x4f/0xc0 blk_mq_freeze_queue_wait+0x69/0xa0 blk_mq_freeze_queue+0x1b/0x20 blk_cleanup_queue+0x3d/0xd0 virtblk_remove+0x3c/0xb0 [virtio_blk]
virtio_dev_remove+0x4b/0x80 ... device_unregister+0x1b/0x60 unregister_virtio_device+0x18/0x30 virtio_pci_remove+0x41/0x80 pci_device_remove+0x3e/0xb0
これは、virtio_pci_remove()内でpci_device_is_present(VF)が「false」を返したため、virtio_break_device()が呼び出されたことが原因でした。破損したvqにより、vring_interrupt()はvirtblk_done()を介してvirtio I/O操作を完了させるはずだったvq.callback()をスキップしてしまいました。
[bhelgaas: コミットログ、常にpci_physfn()を使用するように簡略化、stableタグ追加]
If you want to get best quality of vulnerability data, you may have to visit VulDB.