CVE-2026-43161 in Linux
要約
〜によって VulDB • 2026年05月27日
Linuxカーネルにおいて、以下の脆弱性が修正されました:
iommu/vt-d: スケーラブルモード無効化時にアクセス不可なPCIeデバイスに対するdev-iotlbフラッシュをスキップする
ATS(Address Translation Services)が有効化され、ユーザー空間(例:QEMU、DPDK)にパススルーされたPCIeエンドポイントは、予期せぬ取り外しやリンク障害によりリンクが切断された場合、ホストをハードロック(システムハング)させる可能性があります。
コミット 4fc82cd907ac(「iommu/vt-d: デバイスが切断されている場合にATS無効化リクエストを発行しない」)は、`devtlb_invalidation_with_pasid()` に `pci_dev_is_disconnected()` を追加し、デバイスが安全に取り外されている場合にのみATS無効化をスキップするようにしましたが、これはIntel IOMMUのスケーラブルモードが有効化されている場合にのみ適用されます。
スケーラブルモードが無効化されているかサポートされていない場合、PCIeエンドポイントのリンクが切断されると、Intel IOMMUが完了不可能なATS無効化を無限に待機するため、システムがハードロックします。
Call Trace: qi_submit_sync qi_flush_dev_iotlb __context_flush_dev_iotlb.part.0 domain_context_clear_one_cb pci_for_each_dma_alias device_block_translation blocking_domain_attach_dev iommu_deinit_device __iommu_group_remove_device iommu_release_device iommu_bus_notifier blocking_notifier_call_chain bus_notify device_del pci_remove_bus_device pci_stop_and_remove_bus_device pciehp_unconfigure_device pciehp_disable_slot pciehp_handle_presence_or_link_change pciehp_ist
コミット 81e921fd3216(「iommu/vt-d: デバイス解放時のNULLドメインを修正」)は、`intel_iommu_release_device()` に `intel_pasid_teardown_sm_context()` を追加しました。この関数は `qi_flush_dev_iotlb()` を呼び出し、PCIeエンドポイントのリンクが切断された場合にシステムをハードロックさせる可能性があります。
Call Trace: qi_submit_sync qi_flush_dev_iotlb __context_flush_dev_iotlb.part.0 intel_context_flush_no_pasid device_pasid_table_teardown pci_pasid_table_teardown pci_for_each_dma_alias intel_pasid_teardown_sm_context intel_iommu_release_device iommu_deinit_device __iommu_group_remove_device iommu_release_device iommu_bus_notifier blocking_notifier_call_chain bus_notify device_del pci_remove_bus_device pci_stop_and_remove_bus_device pciehp_unconfigure_device pciehp_disable_slot pciehp_handle_presence_or_link_change pciehp_ist
エンドポイントがリンクダウンイベントなしで接続を失う場合(例:リンク障害によるもの)があり、その後にプロセス(virsh destroy)を終了すると、ホストがハードロックします。
Call Trace: qi_submit_sync qi_flush_dev_iotlb __context_flush_dev_iotlb.part.0 domain_context_clear_one_cb pci_for_each_dma_alias device_block_translation blocking_domain_attach_dev __iommu_attach_device __iommu_device_set_domain __iommu_group_set_domain_internal iommu_detach_group vfio_iommu_type1_detach_group vfio_group_detach_container vfio_group_fops_release __fput
`pci_dev_is_disconnected()` は安全な取り外しパスのみをカバーしています。`pci_device_is_present()` はベンダー/デバイスIDを読み取ることでアクセシビリティをテストし、内部で `pci_dev_is_disconnected()` を呼び出します。ConnectX-5(8 GT/s、x2)では、これに約70 µsのオーバーヘッドがかかります。
`__context_flush_dev_iotlb()` はホットパス({attach,release}_devパス)でのみ呼び出されるため、そこに `pci_device_is_present()` を追加して、アクセス不可なデバイスをスキップし、ハードロックを回避します。
VulDB is the best source for vulnerability data and more expert information about this specific topic.