This release includes the following changes:
AVRCP
- avrcp: validate name length when parsing browsed media items (#2172)
- avrcp: Abort continuing response on fragmented CT replies (#2211)
Audio
- a2dp: Normalize multi-bit codec IE fields in remote Set Configuration (#1892)
- a2dp: start connecting sink profile before source (#1899)
- a2dp: connect source profile after sink (#1902)
- audio/avrcp: fix EVENT_VOLUME_CHANGED not supported (#1938)
- transport: Fix set volume failure with invalid device volume (#1949)
- audio/player: Ensure metadata string is valid UTF-8 (#2030)
- audio: Add ability to force CIS transport Links property (#2065)
- transport: Complete Acquire for Sink ASE entering Enabling (#2210)
- media: use custom DBus timeouts only when remote side is waiting (#2233)
- audio: harden a2dp parsers (#2242)
- a2dp: Fix handling of codec capability storage (#2251)
BAP (Basic Audio Profile)
- bap: reduce ISO sync timeout to 2s (#1785)
- bap: reduce ISO sync timeout to 3.6 secs (#1808)
- shared/bap: Fix endpoint configuration (#1921)
- bap: Fix typo in QoS D-Bus dictionary entry names (#2105)
- shared/bap: set QoS state when CIS is lost (#2127)
- shared/bap: Fix unused value in qos (#2139)
- bap: bound channel allocation ltv copy to avoid stack overflow (#2198)
- shared/bap: add ASE Control Point error responses (#2199)
- shared/bap: Report invalid-length ASE CP write via notification (#2207)
- shared/bap: Initialize ucast/bcast IDs as unset (#2229)
- shared/bap: Transition ASE to QoS Configured on CIS loss (#2230)
BASS (Broadcast Audio Scan Service)
- bass: Fix crash if setup is freed before bass_bcode_req response (#1888)
- bass: Fix crashing on BT_BASS_MOD_SRC (#2036)
- bass: allocate subgroup_data for all subgroups in bass_build_bcast_src (#2165)
- bass: Fix possible crash on bass_update_bis_sync (#2257)
Bug Fixes
- Add Null Pointer Checks (#1863)
- Fix use-after-free in BAP broadcast cleanup (#1897)
- Fix bluetoothctl no output (#1932)
- [] mesh-gatt: Fix JSON files missing from dist (#1957)
- Fix mangling of numbered UHID GET_REPORT_REPLY payloads (#1960)
- [RESEND,BlueZ] mesh-gatt: Fix JSON files missing from dist (#1988)
- Fix unsolicited AVRCP RegisterNotification response (#2011)
- BAP broadcast fixes (#2052)
- sixaxis: Fix pairing Esperanza EGG109k controller (#2063)
- sdp: fix overflow in sdp_extract_seqtype() (#2094)
- mpris-proxy: Fix possible crash (#2098)
- [RFC,BlueZ] monitor: Fix RAS CS step mode parsing issues (#2111)
- pbap: Fix not checking Database Identifier length (#2120)
- [RFC,BlueZ] media: Fix possible crash on exit/adapter removal (#2122)
- advertising: Fix sending extra bytes with MGMT_OP_ADD_EXT_ADV_DATA (#2167)
- test-mesh-crypto: Fix retval for skipped test (#2181)
- avdtp: Fix GET_CONFIGURATION cmd (#2192)
Build System
- build: never build test-runner with ASAN (#2017)
- build: Support libical 4.0 (#2177)
Device Management
- device: Initialize device volume with a valid value (#1810)
- src/adapter.c: Re-pairing and reconnection are required after restart. (#1826)
- src: retain const qualifier from pointer (#1873)
- adapter: Add btd_adapter_send_cmd_event_sync (#1876)
- adapter: Fix “Failed to set default system config” startup warning (#1972)
- src/device: Fix stored gatt cache DB Hash value not update (#1998)
- src/log.h: Add line number information to log output. (#2006)
- device: warn user on BR connection key mismatch (#2010)
- device: warn on BR/EDR connection key mismatch (#2013)
- device: Fix btd_device_connect_services not discovering (#2024)
- src/device: Add ConnectedUUIDs property (#2028)
- adapter: add DisableDiscoveryOnConnect option for combo chip coexistence (#2054)
- src/shared: implement custom CCC callbacks for intercepting client notification subscriptions (#2066)
- src/shared: add custom CCC callbacks (#2068)
- adapter: add BCAA UUID also when seen device is not discoverable (#2119)
- src/shared: parse local & remote data and expose CS ranging data (#2128)
- device: fix inverted NULL check in gatt_db clone (#2133)
- adapter: Fix using case sensitive strncmp for pattern match addresses (#2179)
- device: Refactor device_discover_services function (#2186)
- device: Fix auth_retry timeout not being removed on reconnect (#2191)
- device: Fix cache update on device remove (#2194)
- adapter: Fix failed bonding attempt after LE link disconnection (#2213)
- adapter: Fix crash on dev_disconnected (#2264)
Documentation
- doc/bluetoothctl: Document arguments and add examples (#1856)
- doc: Add cross-references between bluetoothctl and D-Bus API documentation (#1859)
- doc/btmon: Add reading output section (#1889)
- doc/btmon: Add missing documentation (#1918)
- doc/qualification: Updates for TCRL pkg101 (#1940)
- doc/qualification: follow up patches (#1945)
- doc/btmon: Add GATT database reconstruction guide (#1954)
- doc/btmon: Split Advertising and Scanning into btmon-advertising.rst (#1987)
- doc: Document bidirectional (Source+Sink) ASE flow in LE Audio (#1989)
- doc: add btmon-mgmt.rst (#2001)
- doc: Add missing btmon-cs doc to btmon.rst (#2045)
- doc: Add AI coding assistants guidelines (#2060)
- doc: Fix Data Path direction in btmin-le-audio.rst (#2140)
Emulator
- emulator: Fix compilation on big endian systems (#1880)
- hciemu: Fix silently dropping packet if writev return -EAGAIN (#1931)
- hciemu: Fix crash if hciemu_client_new return NULL (#2099)
- emulator/vhci: Add debug messages to error paths (#2100)
- emulator/btdev: Add LE Set Host Feature V2 command emulation (#2154)
GATT
- gatt-client:Implement error handling for DB_OUT_OF_SYNC in GATT caching. (#1809)
- gatt-client:Implement error handling for DB_OUT_OF_SYNC in GATT caching (#1925)
- gatt-client: Fix use-after-free caused by reentrant client teardown (#2084)
- gatt: validate data_length when parsing read-by-type response (#2196)
- shared/gatt: Fix gatt-db buffer overflow for cloned db (#2237)
ISO (Isochronous Channels)
- iso-tester: add tests for set & receive ISO HW timestamps (#1956)
- iso-tester: fix missing clear of io_id in callbacks (#1993)
- shared/mcp: fix crash on destroy after ATT gone (#2021)
Management Interface
- mgmt: Remove mgmt_ev[] strings of undefined MGMT events (#2158)
Mesh
- mesh: Remove unused but set variable (#2117)
Monitor
- monitor: Fix -a/–analyze printing wrong connection type (#1943)
- monitor: check data size properly in evt_num_completed_packets (#2018)
- monitor: Fix not loading local GATT DB from cache (#2022)
- monitor: Add decoding for Microsoft defined event (#2038)
- monitor: Add L2CAP channel details to analyze output (#2042)
- monitor: Add decoding support for Public Broadcast Announcements (#2078)
- monitor: Add features bits defined in 6.2 (#2095)
- monitor: Add parsing of CS step mode data in RAS Notifications (#2107)
- monitor: Add parsing of CS step mode data in RAS Notifications Subevent #0: Start ACL Connection Event: 406 Frequency Compensation: -16384 (0.01 ppm) Ranging Done Status: Partial results, more to follow (0x1) Subevent Done Status: All results c (#2108)
- monitor: Parsing of cs step mode data in RAS Notifications (#2109)
- monitor/att: split parsers for 0x21 and 0x23 in btmon (#2126)
- monitor: Add support for HCI Event Encryption Change v2 (#2146)
- monitor: Add decoding support for LE Connection Subrating (#2171)
OBEX
- obexd/bip: Fix uninitialized memory and malformed XML in GetImage request (#1983)
- obexd: fix PBAP PullPhoneBook failure with ebook backend (#2145)
Other
- Support for config fragments (conf.d style dirs) (#1792)
- Implement the Bluetooth Ranging Profile GATT server and client support as specified by the Bluetooth SIG: (#1818)
- retain const qualifier from pointer (#1872)
- Add release notes for 68 PRs closed Nov 21, 2025 - Jan 8, 2026 (#1878)
- Analysis: Lenovo IdeaPad Duet keyboard requires Feature Report init (#1894)
- zsh: amend completions (#1913)
- l2test: Attempt to use BT_SNDMTU if output MTU has been set (#1920)
- bthost: Add segmentation support for L2CAP LE-(E)CRED mode (#1928)
- Enable and add support for Nintendo Switch 2 controllers (#1937)
- Nintendo Switch 2 support (#1946)
- lib/bluetooth/mgmt: Add missing mgmt_op entry for HCI_CMD_SYNC (#1947)
- Revert “bluetooth.service: Set ConfigurationDirectoryMode” (#1991)
- [RFC,BlueZ,v1] doc/btmon: Add Channel Sounding protocol flow documentation (#2002)
- avdtp: ignore Discover cmd when host sends before (#2004)
- [RFC,BlueZ,1/3] doc/btmon: Add Channel Sounding protocol flow documentation (#2005)
- BLE-HID/Nintendo Switch 2 support (#2009)
- sixaxis: use 0x12 command to get device mac address for ds4 (#2014)
- sixaxis: DS4: use 0x12 cmd to get device bdaddr (#2015)
- gatt-database: remove database from dbs list when destroyed (#2029)
- [Bluez,1/2] monitor: define manufacturer company IDs (#2031)
- Add initial Channel Sounding Reflector (#2032)
- Add initial Channel Sounding support - (#2041)
- Add initial Channel Sounding support (#2043)
- Remove glib dep from non-glib shared library (#2046)
- [1/2] adapter: add DisableDiscoveryOnConnect option for combo chip coexistence (#2055)
- Add initial Channel Sounding support for (#2059)
- Add ability to desynchronized transports for PTS tests (#2080)
- Add RAS Packet format and Notification support (#2086)
- [RFC,BlueZ,1/3] shared/hci: Add BPF filter for registered events (#2087)
- /bap: Handle CIS loss during streaming (#2116)
- Add helper for “cleanup” variable attribute (#2118)
- Functional/integration testing (#2123)
- tester.config: add missing CRYPTO_AES (#2131)
- test-mesh-crypto: Don’t attempt to run test if AF_ALG is not available (#2147)
- advertising: add property with advertisement ID (#2149)
- Add configurable default LE PHY policy (#2153)
- advertising: add property with advertisement Instance (#2161)
- profile: Set L2CAP IMTU for external profile listeners (#2164)
- profile: Set L2CAP IMTU for OBEX profile listeners (#2176)
- btio: handle error from broadcast ISO socket (#2182)
- btio: Handle EOPNOTSUPP from accept() to prevent busy loop (#2206)
- avdtp: Return correct error when SEP is inuse (#2212)
- added missing NULL check on buf (#2215)
- gatt-database: Prefer notifications over indications (#2231)
- Initial Channel Sounding Support for (#2235)
- RAP: Move CS default settings (#2260)
Profiles & Plugins
- input: Handle HIDP continuation frames gracefully (#1893)
- input: Fix checking LE bonding on HIDP (#2062)
- profiles/ranging: Read measured_freq_offset field-16 bit as per Core Spec (#2178)
- main: Fix bitwise AND operator in check_sirk_alpha_numeric() (#2214)
- hostname: Update adapter name on transient hostname change (#2216)
- profiles/audio/bass: Use BASS_Modify_Source when assistant is active (#2218)
- profiles/midi: Fix zero timestampHigh (#2256)
Shared Libraries
- shared/att: make att channel respect LE socket security level (#1864)
- shared/util: Add byte-swapping macros for constants (#1877)
- shared/shell: gracefully recover from failed input initialization (#1906)
- shared/shell: Fix bt_shell_printf in non-interactive mode (#1909)
- shared: recover from failed input initialization (#1910)
- shared/att: Simplify logic of DB out of sync recovery (#1926)
- shared/ad: Fix not checking length on ad_replace_name (#1966)
- shared/shell: Fix crash on bluetoothctl command completion (#1974)
- shared/shell: Fix SIGSEGV on invalid input (#1975)
- shared/util: Add MIN/MAX implementations (#1996)
- shared/queue: Add way to iterate over queue contents (#2008)
- shared/gatt-server: Add bt_gatt_server_set_permissions (#2026)
- shared/util: Add decoding support for HIDS 1.1 UUIDs (#2089)
- shared/hci: Add BPF filter for registered events (#2091)
- shared/rap: fix use of uninitialized value (#2130)
- shared/rap: Add client real-time ranging registration and notification parsing (#2138)
- shared/rap: Add client ranging registration and notification parsing (#2175)
- shared/hci: Avoid redundant BPF filter updates on duplicate events (#2197)
- shared/rap: Fix Mode 0 step serialization (#2239)
- shared: harden btsnoop trace parsing (#2243)
- shared: rap: Defer CS Event registration until connection setup (#2250)
- shared/rap: Fix step payload pointer in parse_step (#2252)
Testing
- unit: Add test cases for Ranging Profile (RAP) This adds unit test cases for the Ranging Profile (RAP) implementation, specifically testing the Ranging Service (RAS) server functionality. (#1820)
- unit: Add unit test for new MIN/MAX macros (#2003)
- unit: test-bap: disable optimization to speed up compilation (#2246)
- tools/btpclient: Fix eir data on GAP device found event (#1794)
- tools/sdptool: report error when local SDP server is not found (#1852)
- client: Add mgmt.exp-iso command (#1882)
- tools/btpclient: Add GATT support to get Device name (#1883)
- tools/btpclient: Move btpclient to client/btpclient directory (#1904)
- client/btpclient: Fix build warning (#1908)
- client/btpclient: Add GATT support to get Device name (#1912)
- client/btpclient: Move BTP definitions per service (#1923)
- client/mgmt: fix compiler error (#1927)
- client: align ‘io-cap’ and ‘pair’ cmds with the docs (#1933)
- tools/btmgmt: Fix btmgmt –help hanging (#1955)
- client: add advertise broadcast-name helper (#1958)
- client: add bluetoothctl broadcast-name helper (#1961)
- client: add public-broadcast advertise helper (#1967)
- client/btpclient: Add GATT read and write value supports (#2012)
- tools/smp-tester: don’t write array out of bounds (#2019)
- client/btpclient: Add BTP_OP_BAP_DISCOVER support (#2049)
- client/btpclient: Add GATT discovery supports (#2050)
- client: Add public broadcast advertising support (#2083)
- tools/tester: Fix crash when hciemu_new fails (#2103)
- client/btpclient: Add BTP_EV_GAP_SEC_LEVEL_CHANGED support (#2106)
- btmon/TDS: decode org 0x02 as Wi-Fi Alliance (#2113)
- client/btpclient: Fix GAP unpair command (#2136)
- client/btpclient: Add GAP extended advertising support (#2137)
- client/mgmt: Add options to ltks command for loading entries (#2173)
PR List: https://github.com/bluez/bluez/pulls?q=is%3Apr+is%3Aclosed+closed%3A2026-02-09T21:27:33Z..2026-07-07T16:37:15Z+PW_SID
Full Changelog: 5.86…5.87