CVE-2026-43211Linux内核中的PCI子系统存在一个逻辑错误漏洞,涉及pci_slot_trylock()函数的错误处理。该漏洞源于代码重构时未正确移除失败路径下的解锁调用。当pci_bus_trylock()失败时,遗留的pci_dev_unlock()会被执行,导致解锁未持有的锁或错误释放其他线程的锁。本地攻击者可利用此漏洞导致系统不稳定、内核崩溃或潜在的权限提升。
该漏洞位于Linux内核的PCI插槽驱动中。在引入特定提交(a4e772898f8b)后,pci_slot_trylock()函数修改了锁定bridge device的方式,将其委托给pci_bus_trylock()。然而,代码审查发现,当pci_bus_trylock()尝试锁定子总线失败并跳转至错误处理路径时,并未移除原本用于释放bridge device锁的pci_dev_unlock(dev)调用。
由于此时bridge device的锁实际上并未被当前线程以传统方式持有(已被委托逻辑取代),执行pci_dev_unlock(dev)会导致两种异常情况:一是内核检测到“解锁未持有锁”并发出警告;二是更严重的竞态条件,即该锁可能正被其他线程持有,导致错误的释放操作,破坏内核同步机制。考虑到CVSS 3.1评分7.8,该漏洞允许本地低权限用户通过触发特定PCI操作造成拒绝服务或内存破坏。