CVE-2026-43253Linux内核中的AMD IOMMU驱动程序存在拒绝服务漏洞。在启用iommu.strict=1且处于高压力环境下,现有的完成等待路径会触发软死锁。根本原因在于wait_on_sem()函数在持有自旋锁并禁用中断的情况下进行忙等待。该操作仅轮询硬件更新的cmd_sem,实际上并不需要iommu->lock,但持有锁进行忙等待不必要地增加了资源争用,延长了中断禁用时间,导致系统失去响应。
该漏洞位于Linux内核的iommu/amd驱动模块中,涉及iommu_completion_wait()函数的执行逻辑。原代码在持有自旋锁的状态下调用了wait_on_sem()。wait_on_sem()是一个忙等待函数,用于轮询硬件命令信号量以确认操作完成。由于自旋锁期间中断是关闭的,如果在高负载下硬件响应缓慢,长时间的忙等待会导致CPU无法处理其他中断,从而引发“soft lockup”内核恐慌。修复方案是将iommu_completion_wait()中的完成等待操作移至自旋锁之外。wait_on_sem()仅读取硬件寄存器,不涉及iommu->lock保护的临界区数据,因此不需要锁保护。通过释放锁再进行等待,允许中断响应,消除了死锁风险。攻击者可通过触发大量IOMMU操作并设置iommu.strict=1,利用该缺陷导致系统崩溃。