本文为您梳理了过去两周内 Linux 蓝牙子系统(Linux Bluetooth Subsystem)在邮件列表上的核心动态。内容涵盖 BlueZ 协议栈的重大重构、关键安全漏洞的披露与修复、新硬件设备的支持、以及多项底层驱动和功能的改进。
一、BlueZ 项目重大重构:引入 Meson 构建系统
Bastien Nocera 发起了一项影响深远的系列补丁 [BlueZ v10],旨在对 BlueZ 项目的构建系统进行现代化改造。
- 核心变更:
正式引入 Meson 构建系统,逐步替代传统的 Autotools。这将显著提升项目的构建速度和跨平台兼容性。 - 配套改进:
为 libell库添加 Meson wrap 支持。分离 systemd 和 libsystemd 的依赖关系,提高构建灵活性。 增加对 libical 4.x 版本的构建支持。 - 构建逻辑优化:
添加选项以允许禁用 bluetoothd守护进程。仅在构建守护进程时才编译 profile 模块。 条件化构建 gdbus 库,避免无用依赖。 - 安装策略调整:
默认安装 avinfo工具,便于音频设备调试。当启用废弃工具时,安装 gatttool。如果构建了模拟器,则将其安装到系统路径中。 - 测试与文档增强:
新增集成测试以提升整体稳定性。 使 test-bap和gobex-transfer等单元测试支持并发运行,加快测试速度。新增 HTML 格式的官方文档,并配置 GitHub Actions 实现文档的自动部署。 为 GATT 协议添加介绍性文档。
二、代码质量与安全性提升
1. 广泛采用 _cleanup_() 机制
Bastien Nocera 推动了另一项系列改进 [BlueZ 0/5],旨在提升代码的安全性和可读性。
在 shared/util模块中添加了用于 "cleanup" 变量属性的辅助函数。在主程序中应用该机制,简化了配置解析和 GError 错误处理的代码。 相关文档已更新,建议在 BlueZ 项目中广泛使用 _cleanup_及其相关宏。
2. 关键安全漏洞披露与修复
一个高危安全漏洞被公开披露并迅速得到响应。
- 漏洞详情:
在 BlueZ 的 sdp.c文件中,sdp_extract_seqtype()函数存在符号整数下溢(signed integer underflow)问题。攻击者无需配对即可触发,可能导致堆越界读取(OOB heap read),评分为 8.1 (HIGH)。 - 修复过程:
Martin Brodeur 提交了多版补丁来修复此溢出问题,经过 Luiz Augusto von Dentz 等维护者的审查后,最终版本被合并。 - 状态:
该漏洞已在近期提交中得到修复。
3. 内存安全与竞态条件修复
多个潜在的内存错误和竞态条件被发现并修复。
- UAF (Use-After-Free) 修复:
Jann Horn 提交补丁,修复了 bt_accept_poll()函数中对->accept_q的释放后使用(UAF)读取问题。修复了 GATT 客户端因重入销毁导致的 UAF 问题。 - 锁竞争修复:
Luiz Augusto von Dentz 讨论并推动了 v5 版本的补丁,通过延迟连接参数更新来避免 conn->lock和hdev->lock之间的锁顺序反转(inversion),从而解决死锁风险。
三、新功能与协议支持
1. 短连接间隔 (SCI) 支持
Luiz Augusto von Dentz 推动了对短连接间隔(Short Connection Interval, SCI)功能的支持。
- 内核层:
为 HCI 层添加了初步支持,并在 MGMT 接口中增加了对应的设置位(bit 25)。 - 监控层:
在 monitor模块中添加了对 SCI 特性的解码支持,以便于调试和分析。
2. RAS (Radio Access Service) 支持
Prathibha Madugonde 主导了对 RAS 数据包格式和通知的支持。
在 src/shared模块中添加了 RAS 数据包格式和通知支持。为 ranging配置文件添加了对cs_mode_one_data成员的读取功能。为 test-rap单元测试添加了针对 CS 反射器的 PTS 测试。
3. HIDS 1.1 UUID 解码支持
Luiz Augusto von Dentz 为 shared/util 和 monitor 模块添加了对 HIDS 1.1 UUIDs 及其标志和属性的解码支持,增强了对人机接口设备的兼容性。
四、驱动与硬件支持更新
1. 新设备 ID 支持
- MediaTek MT7902:
Sean Wang 提交补丁,为 btusb驱动添加了新的 USB VID/PID (0x0489/0xe156),以支持该芯片组。此补丁已获得 Kirill Shubin 的确认。 - Intel SAR Rev2:
Kiran K 提交补丁,为 btintel驱动添加对蓝牙 SAR 修订版2的支持,目前正由 Intel 团队评估。
2. 驱动 Bug 修复
- Realtek RTL8761B/BU:
Alexej Sidorenko 提交补丁,修复了该芯片 LE 扩展扫描功能失效的问题。 - BCM4377:
Uwe Kleine-König 使用命名初始化器改进了 hci_bcm4377驱动中 PCI 设备 ID 数组的可读性。
五、社区讨论与问题追踪
1. 用户问题报告
- 无线手柄连接失败:
用户报告了“Wireless gamepad stopped working through Bluetooth”的问题(Bug 221449),并在一周内多次更新日志信息,但尚未有明确的解决方案。 - 固件加载失败:
Zenm Chen 报告了 Realtek 蓝牙设备(rtl_bt/rtl8761a_config.bin)固件加载失败的问题。Max Chou(Realtek)已介入提供技术支持。 - MT7925 固件超时:
报告了 MediaTek MT7925 设备在加载固件时出现超时(-110)的问题(Bug 220237)。 - AX200 启动错误:
报告了 AX200 无线网卡在更新固件后启动出现 -19 错误。
2. RFC 补丁讨论
Dan Klishch 提出了一项 RFC 补丁,旨在修复在 HCI_AUTO_OFF宽限期内设置控制器公共地址的问题,引发了社区的技术讨论。
3. 自动化测试与构建
kernel test robot多次报告 bluetooth-next主分支的构建成功,表明主线开发稳定。bluez.test.bot对大量补丁进行了自动化测试验证,确保了代码质量。 syzbot 发布了 2026 年 5 月的月度崩溃报告,并报告了 l2cap_send_conn_req中的内核警告和skb_pull中的 slab-use-after-free 问题。
