CVE-2026-43023Linux内核蓝牙SCO(同步连接导向)套接字处理中存在严重的竞态条件漏洞。在`sco_sock_connect()`函数中,由于在未持有套接字锁的情况下检查了`sk_state`和`sk_type`,导致两个并发的connect系统调用可能同时通过检查并进入`sco_connect()`函数。这种竞态场景下,当一个线程正在建立连接,而另一个线程或HCI断开事件清理了连接时,会导致释放后重用和双重引用计数减少。攻击者可利用此漏洞造成内核崩溃(拒绝服务)或潜在的权限提升。
该漏洞的核心原理在于`sco_sock_connect()`函数的锁机制设计不当,存在检查与使用之间的竞态窗口。具体场景涉及线程A和线程B同时对同一socket发起connect操作。线程A建立连接`hcon1`并将其关联到`sk`,但在完成前,由于HCI断开事件,连接可能被` sco_conn_del`清理,将`sk`状态置为`BT_CLOSED`并解除关联。此时线程B恢复执行,尝试建立`hcon2`,并将`sk`重新关联到`conn2`,将已关闭的socket“复活”为`BT_CONNECT`状态。这导致后续清理逻辑触发双重释放和UAF。修复方案通过提前加锁、增加状态二次检查以及防止双重连接关联来解决此问题。