CVE-2026-31499Linux内核蓝牙L2CAP模块存在死锁漏洞。在`l2cap_conn_del`函数删除连接时,代码在持有`conn->lock`锁的情况下同步取消定时器工作。若此时工作函数正在运行并尝试获取同一个锁,将形成AB-BA死锁。本地低权限攻击者可利用此竞争条件触发死锁,导致系统崩溃或蓝牙服务拒绝服务。
该漏洞位于Linux内核蓝牙协议栈的L2CAP层,根源在于锁的不当使用导致了死锁风险。具体问题出现在`l2cap_conn_del`函数中,该函数在持有`conn->lock`自旋锁的保护下,调用了`cancel_delayed_work_sync()`来取消`info_timer`和`id_addr_timer`。
`cancel_delayed_work_sync`是一个同步操作,它会等待正在执行的工作函数运行完毕。然而,被取消的工作函数(如`l2cap_info_timeout`和`l2cap_conn_update_id_addr`)在执行路径中同样需要获取`conn->lock`。
因此,当`l2cap_conn_del`持有锁并等待工作结束时,如果工作函数正在执行并试图获取同一个锁,就会形成AB-BA死锁。这种情况下,内核进程将无限期等待,导致系统挂起或崩溃。利用此漏洞需要本地访问权限,攻击者可以通过特定的蓝牙操作序列触发竞争条件,从而造成拒绝服务攻击。