Linuxカーネルにおいて、以下の脆弱性が修正されました。iommu/s390では、デバイスがサプライズリムーブされた場合でもアタッチを成功させる問題がありました。PCIデバイスがサプライズホットプラグで取り外された場合に、__iommu_release_dma_ownership()経由の解体処理や、プローブ中の__iommu_probe_device()で取り外しが発生した場合、デフォルトドメインへのアタッチが試みられることがあります。いずれの場合でも、zpci_register_ioat()はデバイスハンドルが無効であることを示すcc値で失敗します。これは、ハイパーバイザーの観点からデバイスがもはやインスタンスの一部ではないためです。現在、この場合はエラーが返され、s390_iommu_attach_device()は失敗します。デフォルトドメインへのアタッチは決して失敗してはならないため、__iommu_group_set_domain_nofail()内でWARN_ON()が引き起こされます。デバイスがハイパーバイザーによってフェンスされている場合、メモリへのDMAもメモリからのDMAも不可能であり、IOMMUの変換は影響を与えません。登録が成功したかのように処理を進め、ホットプラグイベントのハンドリングによってデバイスのクリーンアップを行います。この処理は、コミット59bbf596791b("iommu/s390: デバイスがエラーステートでもアタッチを成功させる")以降のエラーステートのデバイス処理に類似していますが、取り外しの場合はドメインが後で登録されません。このアプローチは以前に同リンクで議論されました。エラーステートと取り外しの両方のケースを、エラーの伝搬が必要か無視するかを判定するヘルパーで処理します。PCIロード/ストア用の条件コードの既存で未使用の定義を使用し、これらがすべてのPCI命令に適用されることを反映するように名前を変更し、マジックナンバーの条件コードを回避します。
|