CVE-2026-81039: Bluetooth Host connection reservation leak when multiple connectable advertising sets share an identity
The Bluetooth host pre-allocates a btconn object (a "reservation") from the fixed aclconns[] pool for every connectable advertising set it starts, in leadvstartaddconn() in subsys/bluetooth/host/adv.c. When an incoming peripheral connection completes, findpendingconnect() in subsys/bluetooth/host/hcicore.c looked that reservation up using only the identity and the peer address, with a directed-then-undirected fallback, and had no knowledge of which advertising set actually terminated. With CONFIGBTEXTADVMAXADVSET > 1, where the LE Enhanced Connection Complete event is cached until the LE Advertising Set Terminated event identifies the set, this lookup can return the reservation belonging to a different, still-running advertising set.
The defect is reachable over the air by any adjacent device. If an application runs two connectable extended advertising sets on the same identity — one undirected and one directed at a peer P (the common "directed reconnect to a bonded central while still accepting new centrals" pattern) — a remote initiator whose address maps to P connecting on the undirected set causes the directed set's reservation to be consumed instead. The initiator address is chosen freely by the remote device and is not authenticated at link establishment, so no bonding, pairing or prior relationship is required to trigger the mis-attribution.
The undirected set's own reservation is then stranded: its BTADVENABLED flag has already been cleared, and leadvstopfreeconn() — the only path that returns a reservation to the pool — is reached only for sets that are still enabled, so btleextadvstop() returns early and the object is never released. Each occurrence permanently consumes one CONFIGBTMAXCONN slot until btdisable() or reboot. In application patterns that restart the directed advertising set after each disconnect, an attacker can repeat the sequence until the pool is exhausted, after which connectable advertising fails with -ENOMEM and the device can no longer accept connections. As a side effect the directed set keeps advertising without a reservation, so a genuine connection on it is dropped by bthcidisconnect(). The impact is availability only; no memory corruption or information disclosure results, and configurations with a single advertising set are unaffected.
Affected Software
Event History
Frequently Asked Questions
Which deployments are exposed?
Exposure requires CONFIG_BT_EXT_ADV_MAX_ADV_SET to be greater than 1 and an application that runs multiple connectable extended advertising sets using the same identity. The described scenario uses one undirected set and one directed set targeting a peer while the undirected set remains available for new central connections.
What does an attacker need to exploit this issue?
An attacker only needs to be within Bluetooth radio range; no privileges or user interaction are required. The described trigger is a remote initiator whose address maps to the peer targeted by the directed advertising set, connecting through the undirected set.
How can I check whether my application has the vulnerable configuration?
Check whether the build permits more than one extended advertising set through CONFIG_BT_EXT_ADV_MAX_ADV_SET, and whether the application starts two connectable extended advertising sets under the same identity. In particular, look for concurrent directed advertising to a bonded central and undirected connectable advertising.