CVE-2026-23429CVE-2026-23429 是 Linux 内核中的一个高危安全漏洞,位于 IOMMU SVA(共享虚拟地址)子系统中。该漏洞由于在 `iommu_sva_unbind_device()` 函数中存在错误的内存访问顺序导致。具体而言,`domain->mm->iommu_mm` 指针可能在 `iommu_domain_free()` 调用过程中被释放,但代码随后仍尝试访问该指针。这种“释放后使用”的情况会导致内核崩溃,进而可能引发拒绝服务攻击。该问题影响本地系统稳定性,攻击者需要低权限即可触发。
该漏洞的根源在于 Linux 内核 IOMMU 子系统中对 PASID(进程地址空间 ID)管理逻辑的缺陷。在 `iommu_sva_unbind_device()` 函数执行过程中,代码首先调用 `iommu_domain_free()` 来释放 IO 页表相关的资源。然而,`iommu_domain_free()` 会触发 `mmdrop()`,进而调用 `__mmdrop()` 和 `mm_pasid_drop()`,最终导致 `domain->mm->iommu_mm` 结构体被释放。问题在于,在 `iommu_domain_free()` 返回之后,原代码逻辑仍然尝试访问 `domain->mm->iommu_mm`。此时该内存区域已经被释放,访问该指针构成了典型的 Use-After-Free 漏洞。虽然描述中主要提到崩溃,但在特定条件下,如果攻击者能够控制释放后的内存布局,这可能进一步升级为权限提升漏洞。修复方案是将访问 `domain->mm->iommu_mm` 的代码段移动到 `iommu_domain_free()` 调用之前,确保在内存释放前完成所有必要的访问操作。