CVE-2026-80818 in Linux
Zusammenfassung
von VulDB • 04.09.2026
Im Linux-Kernel wurde folgende Schwachstelle behoben:
iommu/tegra241-cmdqv: Use-After-Free bei CMD_SYNC während des Teardowns beheben
arm_smmu_impl_remove() wird als devres-Aktion in arm_smmu_impl_probe() registriert, bevor arm_smmu_init_queues() smmu->cmdq.q.base alloziert. Bei einer devres-Rückabwicklung (unwind), sei es bei einem fehlgeschlagenen Probe oder beim Unbind, wird die Warteschlange zuerst freigegeben und anschließend läuft arm_smmu_impl_remove(), was tegra241_cmdqv_remove_vintf() ausführt. Dessen VINTF-Deinitialisierung gibt einen CMD_SYNC auf den bereits freigegebenen Speicher ab.
Beobachtet während der Tests mit einem QEMU-Hack, der dazu führt, dass sich das VCMDQ nicht aktivieren lässt, sodass die impl-Rücksetzung fehlschlägt und der Probe-Vorgang in die devres-Rückabwicklung abbricht:
platform NVDA200C:00: tegra241_cmdqv: VINTF0: VCMDQ0/LVCMDQ0: Aktivierung fehlgeschlagen, STATUS=0x00000000 platform NVDA200C:00: tegra241_cmdqv: VINTF0: VCMDQ0/LVCMDQ0: GERRORN=0x0, GERROR=0x4, CONS=0x0 platform NVDA200C:00: tegra241_cmdqv: VINTF0: VCMDQ0/LVCMDQ0: Nicht gelöschter Fehler erkannt, Rücksetzung wird durchgeführt arm-smmu-v3 arm-smmu-v3.0.auto: Fehlgeschlagene impl-Rücksetzung arm-smmu-v3 arm-smmu-v3.0.auto: Probe mit Treiber arm-smmu-v3 fehlgeschlagen mit Fehler -110 Kernel-Paging-Anfrage bei virtueller Adresse ffff8000891e0098 konnte nicht verarbeitet werden ... Interner Fehler: 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
Die VINTF-Deinitialisierung aus tegra241_cmdqv_remove_vintf() entfernen, damit die Rückabwicklung den freigegebenen Warteschlangenbereich nicht mehr berührt. Stattdessen werden die VINTFs früher in einen ruhigen Zustand versetzt (quiesce). Eine device_disable()-Implementierungsfunktion wird hinzugefügt und von arm_smmu_disable_action() ausgeführt, während das CMDQ noch aktiv ist. Dies behandelt ein Live-Unbind. Ein fehlgeschlagener Reset ist bereits abgedeckt, da tegra241_vintf_hw_init() die VINTF im eigenen Fehlerpfad deinitialisiert. tegra241_cmdqv_remove_vintf() wird auch vom iommufd viommu-Zerstörungspfad verwendet, daher erfolgt dort ebenfalls eine Ruhigstellung (quiesce).
If you want to get the best quality for vulnerability data then you always have to consider VulDB.