CVE-2026-43220Linux内核的AMD IOMMU驱动模块中存在一个竞争条件漏洞。该漏洞源于在处理并发TLB(转换后备缓冲器)失效请求时,用于序列分配的`cmd_sem_val`变量未受到适当的锁保护。具体而言,该变量的递增操作在IOMMU自旋锁之外执行,这使得在并发场景下,`CMD_COMPL_WAIT`命令可能被错误地乱序排队。这种乱序破坏了驱动程序在`wait_on_sem()`函数中的顺序假设,导致完成等待操作随机发生超时。该漏洞可能被本地低权限攻击者利用,导致系统服务中断或拒绝服务。
该漏洞位于Linux内核的IOMMU子系统中,具体涉及AMD架构的IOMMU驱动实现。IOMMU负责管理设备对内存的访问,其命令队列需要严格的顺序来保证操作的正确性。在正常情况下,命令的提交和完成等待依赖于一个信号量值(`cmd_sem_val`)来进行序列化。然而,代码逻辑存在缺陷:`cmd_sem_val`的递增操作未在`iommu->lock`自旋锁的保护范围内进行。当多个CPU核心同时发起TLB失效操作时,并发执行的线程可能导致`cmd_sem_val`的值被竞争性地修改,使得后续的`CMD_COMPL_WAIT`命令携带了错误的序列号被插入队列。当驱动程序尝试等待命令完成时,由于序列号的不匹配,`wait_on_sem()`函数将无法收到预期的完成信号,从而陷入超时等待。攻击者可以通过编写多线程程序,在本地系统上频繁触发涉及IOMMU操作的内存映射或DMA操作,从而诱发该竞争条件。成功利用此漏洞可导致内核卡死或资源耗尽,造成系统可用性丧失,但目前暂无证据表明其直接影响数据机密性或完整性。