CVE-2026-31511Linux内核蓝牙MGMT组件存在悬空指针漏洞。在`mgmt_add_adv_patterns_monitor_complete`函数中,由于条件检查逻辑错误,当特定状态不为`-ECANCELED`时,可能直接调用`mgmt_pending_free(cmd)`释放内存而未先从链表中移除该节点。这导致后续遍历链表时访问已释放的内存,引发悬空指针问题,可能造成系统崩溃或权限提升。
该漏洞位于Linux内核的蓝牙管理接口(MGMT)中。问题出在`mgmt_add_adv_patterns_monitor_complete`函数的处理逻辑上。代码原意在处理特定状态时释放命令结构体`cmd`,但在调用`mgmt_pending_free(cmd)`之前,未能正确执行`mgmt_pending_valid`检查或未能先将其从待处理链表中移除。具体而言,当`status != -ECANCELED`时,`mgmt_pending_free`被执行,导致`cmd`指向的内存被`kfree`释放,但链表中的指针并未被清除(即未unlink)。随后,如果系统执行`mgmt_pending_foreach`(如在`__mgmt_power_off`过程中)或再次调用`mgmt_pending_valid`,代码将尝试解引用这个已被释放的内存地址(悬空指针)。这种释放后使用行为可能导致内核崩溃,在特定条件下可能被利用于提权。