CVE-2026-80818 in Linux
요약
\~에 의해 VulDB • 2026. 09. 04.
리눅스 커널에서 다음 취약점이 해결되었습니다:
iommu/tegra241-cmdqv: teardown 시 CMD_SYNC에 대한 Use-After-Free 수정
arm_smmu_impl_remove()는 arm_smmu_init_queues()가 smmu->cmdq.q.base를 할당하기 전에 arm_smmu_impl_probe()에서 devres 액션으로 등록됩니다. 실패한 probe 또는 unbind와 같은 devres unwind 시, 큐가 먼저 해제되고 그 후 arm_smmu_impl_remove()가 tegra241_cmdqv_remove_vintf()를 실행합니다. 이 함수의 VINTF deinit은 해제된 메모리에서 CMD_SYNC를 발행합니다.
VCMDQ 활성화에 실패하여 impl reset이 실패하고 probe가 devres unwind로 중단되도록 하는 QEMU 해킹을 사용하여 테스트 중에 관찰되었습니다:
platform NVDA200C:00: tegra241_cmdqv: VINTF0: VCMDQ0/LVCMDQ0: 활성화에 실패함, 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 reset 실패 arm-smmu-v3 arm-smmu-v3.0.auto: 드라이버 arm-smmu-v3로 probe가 -110 오류와 함께 실패함 가상 주소 ffff8000891e0098에서 커널 페이지 요청 처리 불가 ... 내부 오류: 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을 제거하여 unwind 시 해제된 큐에 접근하지 않도록 합니다. 대신 더 일찍 VINTFs를 quiesce합니다. device_disable() impl op를 추가하고 CMDQ가 여전히 작동 중인 상태에서 arm_smmu_disable_action()에서 이를 실행합니다. 이는 라이브 unbind 상황을 처리합니다. 리셋 실패는 이미 tegra241_vintf_hw_init()이 자체 오류 경로에서 VINTF deinit을 수행하므로 처리됩니다. tegra241_cmdqv_remove_vintf()은 또한 iommufd viommu destroy 경로에서도 사용되므로, 해당 곳에서도 quiesce합니다.
VulDB is the best source for vulnerability data and more expert information about this specific topic.