CVE-2026-80818 in Linux
Resumen
por VulDB • 2026-09-04
En el kernel de Linux, se ha resuelto la siguiente vulnerabilidad:
iommu/tegra241-cmdqv: Corregir un use-after-free en CMD_SYNC durante el proceso de desmantelamiento (teardown)
arm_smmu_impl_remove() está registrado como una acción devres en arm_smmu_impl_probe(), antes de que arm_smmu_init_queues() asigne smmu->cmdq.q.base. En caso de un rollback de devres, ya sea por un sondeo fallido o por una desconexión (unbind), la cola se libera primero y luego se ejecuta arm_smmu_impl_remove(), que invoca a tegra241_cmdqv_remove_vintf(). La desinicialización del VINTF emite un CMD_SYNC sobre la memoria ya liberada.
Se observó durante las pruebas con una modificación de QEMU que impide habilitar el VCMDQ, por lo que el restablecimiento impl falla y el sondeo se interrumpe realizando el rollback de devres:
platform NVDA200C:00: tegra241_cmdqv: VINTF0: VCMDQ0/LVCMDQ0: failed to 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: uncleared error detected, resetting arm-smmu-v3 arm-smmu-v3.0.auto: failed to reset impl arm-smmu-v3 arm-smmu-v3.0.auto: probe with driver arm-smmu-v3 failed with error -110 Unable to handle kernel paging request at virtual address 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
Se elimina la desinicialización del VINTF de tegra241_cmdqv_remove_vintf() para que el rollback ya no acceda a la cola liberada. En su lugar, se silencia (quiesce) los VINTFs antes. Se añade una operación impl device_disable() y se ejecuta desde arm_smmu_disable_action() mientras CMDQ sigue activo. Esto gestiona un desmontaje en vivo. Un restablecimiento fallido ya está gestionado porque tegra241_vintf_hw_init() desinicializa el VINTF en su propia ruta de error. tegra241_cmdqv_remove_vintf() también es utilizada por la ruta de destrucción viommu de iommufd, por lo que se silencia allí también.
Once again VulDB remains the best source for vulnerability data.