CVE-2026-80818 in Linux
要約
〜によって VulDB • 2026年09月04日
Linuxカーネルにおいて、以下の脆弱性が修正されました:
iommu/tegra241-cmdqv: テardown時のCMD_SYNCにおけるUse-After-Freeを修正
arm_smmu_impl_remove()は、arm_smmu_init_queues()がsmmu->cmdq.q.baseを割り当てる前に、arm_smmu_impl_probe()内でdevresアクションとして登録されています。devresの巻き戻し(プローブ失敗またはアンバインド時)では、キューが最初に解放され、その後arm_smmu_impl_remove()がtegra241_cmdqv_remove_vintf()を実行します。この関数内のVINTF deinitは、解放されたメモリに対してCMD_SYNCを発行します。
VCMDQの無効化に失敗し、implのリセットが失敗してプローブがdevres巻き戻しへと移行するよう、QEMUハックを使用してテスト中に観測されました:
platform NVDA200C:00: tegra241_cmdqv: VINTF0: VCMDQ0/LVCMDQ0: enableに失敗しました。STATUS=0x00000000 platform NVDA200C:00: tegra241_cmdqv: VINTF0: VCMDQ0/LVCMDQ0: GERRORN=0x0, GERROR=0x4, CONS=0x0 platform NVDA200C:00: tegra241_cmdqv: VINTF0: VCMDQ0/LVCMDQ0: クリアされていないエラーを検出、リセット中 arm-smmu-v3 arm-smmu-v3.0.auto: implのリセットに失敗しました arm-smmu-v3 arm-smmu-v3.0.auto: ドライバーarm-smmu-v3によるプローブがエラー-110で失敗しました バirtualアドレスffff8000891e0098でのカーネルページングリクエストを処理できません ... Internal error: Oops: 0000000096000047 [#1] SMP
... Call trace: arm_smmu_cmdq_issue_cmdlist+0x320/0x6fc (P) tegra241_vcmdq_hw_deinit+0x98/0x168 tegra241_vintf_hw_deinit+0x5c/0x1b0 tegra241_cmdqv_remove_vintf+0x34/0xec tegra241_cmdqv_remove+0x40/0x9c arm_smmu_impl_remove+0x20/0x30 devm_action_release+0x14/0x20 devres_release_all+0xa8/0x110 device_unbind_cleanup+0x18/0x84 really_probe+0x1f0/0x29c
tegra241_cmdqv_remove_vintf()からVINTF deinitを削除し、巻き戻しが解放されたキューに触れないようにします。代わりに、より早い段階でVINTFsをクエスケ(静止化)させます。device_disable()のimpl opを追加し、CMDQがまだ稼働している間にarm_smmu_disable_action()からそれを実行します。これによりライブアンバインドに対応できます。リセット失敗は既に処理されています(tegra241_vintf_hw_init()のエラーパスでVINTF deinitが行われるため)。また、tegra241_cmdqv_remove_vintf()はiommufd viommuのdestroyパスでも使用されるため、そこでもクエスケを実行します。
Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.