{"id":20481,"date":"2026-09-10T08:31:56","date_gmt":"2026-09-10T00:31:56","guid":{"rendered":"https:\/\/www.54iter.cn\/?vuln=cve-2026-15460"},"modified":"2026-09-10T08:31:56","modified_gmt":"2026-09-10T00:31:56","slug":"cve-2026-15460","status":"publish","type":"vuln","link":"https:\/\/www.54iter.cn\/?vuln=cve-2026-15460","title":{"rendered":"CVE-2026-15460 [MEDIUM] &#8211; The Bluetooth Classic (BR\/EDR) L2CAP receive handler bt_l2cap_br_recv() in subsys\/bluetoot"},"content":{"rendered":"<p>The Bluetooth Classic (BR\/EDR) L2CAP receive handler bt_l2cap_br_recv() in subsys\/bluetooth\/host\/classic\/l2cap_br.c dispatched inbound data PDUs based only on the destination channel ID, without checking that the target channel had reached the BT_L2CAP_CONNECTED state. A dynamic channel is assigned its RX CID and added to the connection&#8217;s channel list while still in BT_L2CAP_CONNECTING (and later BT_L2CAP_CONFIG) \u2014 before configuration completes and, for PSMs that require security, before the peer is authenticated (l2cap_br_conn_req()).<\/p>\n<p>Because the channel is already findable by bt_l2cap_br_lookup_rx_cid() during this window, a remote peer within radio range can send a data PDU addressed to that CID and have it processed on a not-yet-established channel. The dispatch keys off channel fields (BR_CHAN(chan)-&gt;rx.mode, rx.mps) that are only initialized during configuration by l2cap_br_conf(); since channel objects are pooled and bt_l2cap_br_chan_del() does not reset rx.mode or the reassembly buffer _sdu, a reused channel can carry stale state into the CONNECTING window and route the frame into the retransmission\/flow-control path (bt_l2cap_br_ret_fc_recv()) with stale parameters and a possibly stale _sdu pointer.<\/p>\n<p>The impact is delivery of attacker data to upper-layer protocol handlers on a half-open (and possibly unauthenticated) channel, plus operation on stale or partially initialized channel state on reused channel objects \u2014 leading to channel\/link teardown (denial of service) and, in the stale-_sdu case, a dangling-pointer condition. The fix adds an explicit BR_CHAN(chan)-&gt;state &lt; BT_L2CAP_CONNECTED guard that drops any data received before the channel is fully connected.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>The Bluetooth Classic (BR\/EDR) L2CAP receive handler bt_l2cap_br_recv() in subsys\/bluetooth\/host\/classic\/l2cap_br.c dispatched inbound data PDUs based only on the destination channel ID, without check<\/p>\n","protected":false},"template":"","meta":[],"categories":[],"tags":[],"class_list":["post-20481","vuln","type-vuln","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/vuln\/20481","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/vuln"}],"about":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/types\/vuln"}],"wp:attachment":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=20481"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=20481"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=20481"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}