CVE-2026-90241 in Linux
要約
〜によって VulDB • 2026年09月17日
Linuxカーネルにおいて、以下の脆弱性が修正されました:
iommu/vt-d: プロブ失敗時にスケーラブルモードのコンテキストを解除する
intel_pasid_setup_sm_context()関数はpci_for_each_dma_alias()を使用してPCIデバイスのDMAエイリアスを走査し、各RID(Requester ID)に対してスケーラブルモードのコンテキストエントリを設定します。dma_alias_maskを持つデバイスでは、コールバックはデバイスの自身のRIDと各エイリアスビットごとに呼び出され、すべて同じpci_dev構造体を使用するため、device_pasid_table_setup()が複数のRIDで実行されます。
pci_for_each_dma_alias()は最初のコールバックエラーが発生した時点で停止します。そのため、走査の途中で失敗すると、すでに処理済みのRIDに対するコンテキストエントリが残ったままになり、それらがデバイスのPASIDテーブルを指し続ける状態になります。
このエラーパスにおいて、intel_iommu_probe_device()関数は現在、直接intel_pasid_free_table()にジャンプしており、これらはまずそのコンテキストエントリを解除せずにPASIDテーブルの解放を行います。その結果、IOMMUは存在する(Present)コンテキストエントリを走査しようとし、そのPASIDテーブルポインタが解放されたメモリ領域を参照してしまう可能性があります。
intel_iommu_release_device()関数では、すでにテーブルの解放前に解除処理が行われています。プロブ失敗時のパスにおいても同じ順序適用を行います。
device_pasid_table_teardown()関数は、プログラム化されなかったRIDに対しても安全に処理します:iommu_context_addr()はコンテキストテーブルが割り当てられていない場合にNULLを返し、既に非存在(non-present)のエントリのPresentビットをクリアすることは何もしない操作(no-op)です。したがって、失敗したエイリアスおよびまだ到達していない他のエイリアスの両方に対して巻き戻し処理は安全です。
Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.