报告周期:2026-08-06 — 2026-08-12数据来源:lore.kernel.org linux-bluetooth报告生成:2026-08-13
📊 本周概览
📋 本周要点速览
- 1. 🔴 Security — BlueZ SDP XML 三连安全修复 (Bastien Nocera) — v3→v4 演进,覆盖栈溢出、类型混淆、内存泄漏三种高危漏洞
- 2. 🔴 Security — AVRCP GetFolderItems OOB 读取 (Bastien Nocera) — 解析媒体元素名称时的越界读取漏洞
- 3. 🔴 Security — MGMT mesh_tx UAF 修复 (Baul Lee) — 引用计数 + 锁保护 + 析构清理,三层防御
- 4. 🔴 Security — mgmt discovery.uuids NULL 解引用 (Pavel Shpakovskiy) — HCI 命令超时取消后的空指针访问
- 5. 🔴 Security — L2CAP listen 清理竞态 (Pauli Virtanen) — ISO/L2CAP 监听 socket 清理与 put_chan 的竞态条件
- 6. 🔴 Security — 多个 hci_ 驱动 usage_count 泄漏* (Guangshuo Li) — 4 个驱动在 autosuspend_delay 为负时的引用计数泄漏
- 7. 🔴 Security — virtio_bt 探测路径 UAF + 内存泄漏 (ZhaoJinming, Yi Cong) — 多路径错误处理缺陷
- 8. 🟠 New Feature — NVMEM BD Address 检索 (Loic Poulain v10) — 从块设备 NVMEM 读取蓝牙地址,打通 block/nvmem/蓝牙三层
- 9. 🟠 New Feature — btintel_pcie FW 内存区域解析 (Kiran K) — 通过 mailbox TLV 解析固件内存地址,调试路由到 WiFi DBGC
- 10. 🟠 New Feature — hci_sync 清理重构 (Hans de Goede) — 分解 cmd_sync 清理路径,修复 HCI_CMD_PENDING 滞留
- 11. 🟠 New Feature — 设备重探测机制 (Daniel Golle RFC) — 新增 device_schedule_reprobe() 核心辅助函数
- 12. 🟠 Improvement — ISO 栈加固 (Ali Ahmet Memis) — 4 个补丁覆盖 getname 清零、BIG sync 状态、MSFT 长度校验、RFCOMM 互斥
- 13. 🟠 Improvement — L2CAP 安全加固 (Pauli Virtanen, Amir Abudubai) — accept 队列检查、临时 hcon 创建、chan->conn 安全访问
- 14. 🟢 GIT PULL — bluetooth-next 2026-08-07 (Luiz Augusto von Dentz)
🔐 安全修复详解
1. [CRITICAL] BlueZ SDP XML 三连安全修复 (v4)
作者: Bastien Nocera系列: [BlueZ, v4 0/9] 3 SDP XML security fixes影响: BlueZ 用户态 daemon漏洞详情:
- • 类型混淆 (CVE 级别):
sdp_xml_parse_record() 在处理恶意构造的 SDP XML 时,未验证元素类型边界,导致解析器将一种数据类型错误解释为另一种,可能触发任意代码执行。补丁在 sdp-xml.c 中添加了严格的类型检查,确保每个 XML 元素在解析前经过类型验证。 - • 内存泄漏: 在向 SDP 记录添加重复属性时,
sdp-xml.c 的重复属性处理逻辑只会覆盖指针而不释放旧内存,导致每次重复添加都泄漏一块堆内存。补丁在覆盖前调用 free() 释放旧属性数据。 - • 栈溢出: 当
sdp_xml_to_record() 将包含大量嵌套元素的大序列转换为 XML 时,递归深度超过栈限制,导致栈溢出崩溃。补丁通过优化大序列的解析避免深度递归,超过阈值时采用迭代方式处理。 - • v3→v4 演进: 新增了
convert_sdp_record_to_xml() 测试用例,v4 版本增加了对 element_end() 慢速追加的单元测试,覆盖了更完整的边界条件。
2. [CRITICAL] AVRCP GetFolderItems OOB 读取
作者: Bastien Nocera系列: [BlueZ, v3 0/5] avrcp: Fix Out-of-Bounds Read in AVRCP GetFolderItems parsing影响: BlueZ AVRCP 协议栈漏洞详情: AVRCP 的 GetFolderItems 响应中包含媒体元素名称列表,解析函数 parse_*_element() 在读取名称长度字段时未做边界校验,恶意对端可以构造超长的名称长度,导致越界读取堆内存,可能泄漏敏感信息。修复方案将名称解析从 parse_*_element() 中独立拆分为单独的 avrcp_parse_element_name() 函数,加入长度校验和范围检查。同时清除了遗留的 Android avrcp.c 死代码和 test-avrcp 测试,减少攻击面。
3. [HIGH] MGMT mesh_tx UAF 三层防御
作者: Baul Lee系列: [PATCH v2 0/3] Bluetooth: MGMT: fix use-after-free of struct mgmt_mesh_tx影响: 内核 MGMT 子系统漏洞详情: struct mgmt_mesh_tx 的生命周期管理存在缺陷:socket 析构时遍历 mesh 发送队列但未同步,导致并发场景下在析构函数中访问已释放的 mgmt_mesh_tx 对象。v2 补丁系列采用三层防御:
- 1. 移除 socket 析构中的 mesh 遍历 — 避免在析构路径中直接访问 mesh_pending 链表
- 2. hdev->lock 保护 — 所有对
hdev->mesh_pending 的访问都通过 hdev->lock 序列化 - 3. 引用计数 — 引入 kref 引用计数机制,确保对象在有引用时不会被释放
4. [HIGH] mgmt discovery.uuids NULL 解引用
作者: Pavel Shpakovskiy补丁: [PATCH v2] Bluetooth: mgmt: fix 'hdev->discovery.uuids' NULL dereference影响: 内核 MGMT 子系统漏洞详情: 当 HCI 命令超时导致 discovery 状态被取消时,hdev->discovery.uuids 可能已被释放置 NULL,但后续的 MGMT 命令处理仍然尝试访问该指针,导致 NULL 解引用崩溃。v2 版本在访问 hdev->discovery.uuids 之前增加了 NULL 检查,同时在 discovery 取消路径中确保指针置 NULL 后不再被访问。
5. [HIGH] L2CAP listen 清理竞态
作者: Pauli Virtanen补丁: [PATCH v2] Bluetooth: L2CAP: fix race l2cap_sock_cleanup_listen() vs. put_chan影响: 内核 L2CAP 子系统漏洞详情: l2cap_sock_cleanup_listen() 清理监听 socket 时与 put_chan() 存在竞态条件:一个线程正在释放 channel,另一个线程同时遍历监听队列。修复通过引入引用计数检查,确保在清理前 channel 未被释放。此问题也影响 ISO 协议层(ISO 复用 L2CAP 的监听机制)。
6. [HIGH] 多个 hci_* 驱动 usage_count 泄漏
作者: Guangshuo Li补丁: 4 个独立补丁 (hci_intel, hci_h5, hci_bcm, btmtksdio)影响: 4 个蓝牙 UART/SDIO 驱动漏洞详情: 当 autosuspend_delay 配置为负值时,pm_runtime_put_autosuspend() 的调用路径中引用计数递减逻辑缺失,导致 usage_count 持续泄漏,最终阻止设备进入低功耗状态。每个驱动在 hci_uart_setup() 或 btmtksdio_open() 中对 pm_runtime_put_autosuspend 的调用路径进行了修正,确保负 delay 时也正确递减引用计数。
7. [HIGH] virtio_bt 探测路径错误处理缺陷
作者: ZhaoJinming, Yi Cong补丁: [PATCH v2] Bluetooth: virtio_bt: Fix use-after-free and memory leak + [PATCH 0/2] virtio_bt: harden probe error paths影响: virtio_bt 驱动漏洞详情: 探测路径中的错误处理存在多个缺陷:
- •
virtio_find_vqs() 失败后 vbt 结构体泄漏 - • 在
virtbt_open() 中释放资源后仍有引用访问补丁系列重构了整个探测错误路径,确保所有失败分支都正确释放资源。
8. [MEDIUM] msft vendor event UAF
作者: Ren Wei补丁: [PATCH RESEND] Bluetooth: msft: fix vendor event use-after-free during open影响: 内核 MSFT 扩展漏洞详情: 在 msft_open() 和 msft_close() 的竞态场景中,vendor event 的回调可能在设备已关闭后仍被调用,访问已释放的 hdev 结构。补丁添加了状态标志检查,确保只在设备开启时处理 vendor event。
9. [MEDIUM] avdtp connection_lost UAF
作者: Jinwang Li补丁: [PATCH v1] avdtp: Fix use-after-free in connection_lost影响: BlueZ AVDTP 协议栈漏洞详情: AVDTP 连接丢失回调中,session 对象可能在回调执行过程中被其他线程释放,导致 UAF。补丁在 connection_lost 路径中增加了引用计数保护。
10. [MEDIUM] hci_serdev: hci_uart_unregister_device() UAF
作者: ZhaoJinming补丁: [PATCH v2] Bluetooth: hci_serdev: Fix use-after-free in hci_uart_unregister_device()影响: hci_serdev 层漏洞详情: 在 hci_uart_unregister_device() 中,hdev 结构在清理 serdev 之前可能被释放,导致 UAF。v2 版本调整了释放顺序,确保 serdev 在 hdev 释放之前完成清理。
11. [MEDIUM] HIDP 缺少长度校验
作者: Jiale Yao补丁: [PATCH v4] Bluetooth: HIDP: add missing length check for incoming frames影响: HIDP 协议漏洞详情: HIDP 输入帧处理中缺少对帧长度的完整性校验,恶意设备可以发送超短或超长帧导致堆缓冲区溢出。v4 版本在 hidp_recv_intr_frame() 和 hidp_recv_ctrl_frame() 中加入了帧长度验证。
🟠 新功能与驱动支持
1. NVMEM BD Address 检索 (v10)
作者: Loic Poulain系列: [PATCH v10 00/10] Support for block device NVMEM providers状态: 第 10 版演进描述: 本系列打通了从块设备 NVMEM 存储读取蓝牙地址的全链路:
- • 新增 block device NVMEM provider 框架,将 eMMC/SD 卡分区暴露为 NVMEM 设备
- • 新增
of_get_nvmem_eui48() 辅助函数从 NVMEM 读取 EUI-48 格式地址 - • 在
hci_sync 层新增 NVMEM-backed BD address 检索机制 - • QCA 蓝牙驱动新增 NVMEM BD address quirks,当地址无效时自动回退到 NVMEM 读取
- • 新增 Arduino Imola 板级设备树支持意义: 解决了很多嵌入式设备中蓝牙地址存储在 eMMC 分区中的场景,避免了每次启动时蓝牙地址随机化的问题。
2. btintel_pcie FW 内存解析与调试路由
作者: Kiran K系列: [PATCH v1 0/3] Bluetooth: btintel_pcie: FW memory region and debug routing状态: v1 初版描述: Intel PCIe 蓝牙控制器固件增强了调试能力:
- 1. 通过 mailbox TLV 消息解析 FW 内存区域地址 — 允许主机读取固件内部状态
- 2. 同步 mailbox TLV 解析与 GP0 活跃中断 — 确保固件状态同步
- 3. 将调试 trace 默认路由到 WiFi DBGC (Debug Controller) — 统一 Intel 无线调试基础设施
3. hci_sync 清理重构
作者: Hans de Goede系列: [PATCH 0/2] Bluetooth: hci_sync: Cleanup cmd_sync error paths状态: 提交中描述: 修复 hci_sync 层 cmd_sync 的两个关键问题:
- 1. HCI_CMD_PENDING 滞留: 当最后一个 HCI 命令被丢弃时,
HCI_CMD_PENDING 标志未被清除,导致后续所有命令被阻塞。补丁确保在清理最后请求时清除该标志。 - 2. 公共清理逻辑提取: 将多个错误路径中的清理代码提取为公共辅助函数,减少重复代码和维护负担。
4. 设备重探测机制 (RFC)
作者: Daniel Golle系列: [RFC PATCH 0/4] device_schedule_reprobe(): core helper and conversions状态: RFC 讨论中描述: 新增 device_schedule_reprobe() 核心辅助函数,允许驱动在运行时请求重新探测设备:
- • 核心实现放在 driver core 中,作为通用基础设施
- • 蓝牙 btintel_pcie 在 FW 重启后使用该机制重新探测
5. ISO 栈加固
作者: Ali Ahmet Memis补丁: 多个独立补丁描述: 本周最活跃的新贡献者之一,对 ISO 协议栈进行了系统性加固:
- 1. ISO getname 清零:
sockaddr 在返回前清零,防止栈内存泄漏 - 2. BIG sync 状态修复: 失败后不强制设置 BT_LISTEN,避免状态混乱
- 3. MSFT 长度校验: 验证
evt_prefix_len 不超过响应长度,防止缓冲区越界 - 4. RFCOMM 互斥锁: 延迟的 setup accept 操作需要
rfcomm_mutex 保护
6. L2CAP 安全加固
作者: Pauli Virtanen, Amir Abudubai
- • L2CAP accept 队列检查: 拒绝非 BT_LISTEN 状态的 socket 添加 accept 队列请求
- • 临时 hcon 创建: 入站 LE 连接创建临时 hcon,避免连接状态混乱
- • chan->conn 安全访问: 在 get/setsockopt 中安全访问 chan->conn,防止 UAF
7. cmd_sync 负载生命周期修复
作者: Linmao Li (kylinos.cn)系列: [PATCH bluetooth 0/4] Bluetooth: fix cmd_sync payload lifetimes on the cancel path描述: 系统性修复取消路径中的负载生命周期问题:
- 1. hci_conn: SCO setup context 生命周期修复
- 2. hci_sync: 广告实例在失败/取消路径中释放
- 3. MGMT: mesh send 取消命令释放
8. SMP 密钥清理
作者: Thomas Huth补丁: [PATCH v2 4/6] Bluetooth: SMP: clear the aes_cmac_key when done描述: SMP 配对完成后未清除 aes_cmac_key,可能导致密钥在内存中残留。补丁在配对完成后将密钥清零。
🔧 驱动子系统更新
btintel (Intel)
- • FW 内存区域解析 (Kiran K): 通过 mailbox TLV 解析 FW 内存地址,debug 路由到 WiFi DBGC
- • 设备重探测 (Daniel Golle RFC): btintel_pcie 使用 device_schedule_reprobe() 在 FW 重启后重新探测
virtio_bt
- • RX 处理改进 (Igor Skalkin): 在 virtqueue 回调中处理 RX 缓冲区,修复 RX 缓冲区大小
- • 探测路径加固 (ZhaoJinming, Yi Cong): UAF 修复 + 内存泄漏修复 + 错误路径重构
btmtksdio (MediaTek)
- • usage_count 泄漏修复 (Guangshuo Li): 负 autosuspend_delay 时的引用计数泄漏
- • 死锁修复 (ZhaoJinming): close 和 reset 路径中的死锁问题
hci_bcm / hci_h5 / hci_intel (Broadcom, 串口)
- • usage_count 泄漏修复 (Guangshuo Li): 3 个驱动的引用计数泄漏修复
- • 设备重探测 (Daniel Golle): hci_h5 转换到 device_schedule_reprobe()
hci_serdev
- • UAF 修复 (ZhaoJinming): hci_uart_unregister_device() 中的释放顺序问题
msft
- • vendor event UAF (Ren Wei): open/close 竞态修复
btmrvl (Marvell)
- • 代码简化 (Christophe JAILLET): btmrvl_process_event() 轻微简化
qca (Qualcomm)
- • NVMEM BD Address (Loic Poulain): 从 NVMEM 读取蓝牙地址
- • QCC2072 绑定 (Dmitry Baryshkov): 新芯片 dt-binding 讨论
bnep
- • strcpy 重构 (Ajith P V): 弃用 strcpy 替换
🏷️ 核外协议栈——BlueZ 用户空间专题
本周 BlueZ 用户态补丁:32 个(含同一系列多版本),按模块分类如下:
sdp (SDP XML 解析器)
补丁数: 9 (v3) + 9 (v4) = 18 个(实际为同一系列两版迭代)作者: Bastien Nocera核心改动:
- • 类型混淆修复:
sdp_xml_parse_record() 添加严格类型检查,防止恶意 XML 导致的类型混淆攻击 - • 栈溢出修复: 大序列转换时避免递归深度越界,采用迭代处理
- • 性能优化: 大序列解析的优化(element_end() 慢速追加问题)
- • 测试覆盖: 新增
sdp_xml_parse_record() 测试、类型混淆测试、重复属性测试、慢速追加测试、convert_sdp_record_to_xml() 测试
avrcp (Audio/Video Remote Control Profile)
补丁数: 5 (v3)作者: Bastien Nocera核心改动:
- • OOB 读取修复: GetFolderItems 响应解析中的越界读取漏洞
- • 名称解析拆分: 从
parse_*_element() 中拆分独立名称解析函数,加入边界校验 - • 代码清理: 移除 Android avrcp.c 死代码和遗留的 test-avrcp 测试
- • 测试适配: 将 poc_*_oob.c 测试适配为新测试框架
client (bluetoothctl)
补丁数: 3 (v1 + v2)作者: z4pdy / z4pdyy核心改动: 当 discovery 已激活时,避免重复显示扫描提示。v2 版本优化了提示逻辑,防止用户交互阻塞。
shared/gatt-client
补丁数: 1 (v2)作者: Proxy alt核心改动: 不再假设 CCC (Client Characteristic Configuration) 描述符在固定位置,而是通过实际发现流程获取。这修复了与非标准 GATT 服务器兼容性问题。
emulator (btvirt)
补丁数: 1 (v2)作者: Pauli Virtanen核心改动: btvirt 模拟器支持 -s socket server 模式的调试输出,方便测试套件集成。
tools/l2cap-tester
补丁数: 1作者: Pauli Virtanen核心改动: 添加测试用例,在连接后动态更改 BT_SECURITY 级别,验证 L2CAP 安全升级路径的正确性。
unit (单元测试)
补丁数: 多个(与上述系列配套)作者: Bastien Nocera, Pauli Virtanen核心改动: SDP XML 安全测试、AVRCP OOB 测试、L2CAP 安全测试覆盖
👥 关键贡献者
| | | |
|---|
| | | BlueZ 安全修复 (SDP XML, AVRCP) |
| | | |
| | | NVMEM BD Address 框架 (QCA) |
| | | |
| | | |
| | | |
| | | |
| | | device_schedule_reprobe RFC |
| | | |
| | | |
| | | |
| | | |
| | | virtio_bt / hci_serdev UAF |
| | | |
| | | |
🐛 重点 Bug 报告
| | | |
|---|
| KASAN null-ptr-deref in klist_put during HCI connection sysfs teardown | | | |
| WCN6855 10ab:9309 stops reporting ISO TX completions during BAP LC3 | | | |
| Use-after-free in net/bluetooth/iso.c (iso_sock_connect race) | | | |
📦 Pull Requests
| | |
|---|
| [GIT PULL] bluetooth-next 2026-08-07 | Luiz Augusto von Dentz → Linus Torvalds |
🔮 下周关注点
- 1. BlueZ SDP XML 安全系列 v4 合入: Bastien 的 v4 系列已发送,等待 Luiz 的 review 和 merge,预计下周进入 BlueZ 主线
- 2. NVMEM BD Address 框架 v10: Loic 的 v10 系列已扩展了 10 个补丁,涵盖 block/nvmem/net/bluetooth,有望在下一个窗口期合入
- 3. MGMT mesh_tx UAF 修复: Baul 的 v2 三层防御方案本周已获 Luiz 的 review 反馈,预计下周转入合入流程
- 4. ISO 栈系统性加固: Ali Ahmet Memis 的多个 ISO 补丁还在 review 中,包括 getname 清零、BIG sync 状态、MSFT 校验
- 5. device_schedule_reprobe() RFC: Daniel 的 RFC 获得了 Greg KH 和 Luiz 的回复,讨论方向积极,可能加速 btintel_pcie 的重启恢复功能
- 6. WCN6855 ISO TX 问题: 高通芯片的 ISO TX 停止报告问题,Luiz 已回复讨论,下周可能看到修复补丁
- 7. hci_sync 清理重构: Hans de Goede 的补丁已获 Luiz 的 review 反馈,预计合入 bluetooth-next
⚠️ 风险与警示
- 1. ISO 协议的并发安全性: 本周多个报告指向 ISO 协议的并发问题(UAF in iso_sock_connect、WCN6855 TX 停止),说明 ISO 协议栈的锁保护和生命周期管理仍需系统性加固。
- 2. cmd_sync 取消路径的普遍缺陷: Linmao Li 的系列和 Hans de Goede 的清理都指向同一个问题——cmd_sync 取消路径中的资源释放遗漏。这似乎是 hci_sync 框架的设计缺陷,影响多个子系统。
- 3. 驱动层 usage_count 泄漏的普遍性: Guangshuo Li 在 4 个驱动中发现了相同的 usage_count 泄漏模式,暗示这可能是一个更广泛的编程模式问题,其他未覆盖的驱动可能也存在同类缺陷。
- 4. BlueZ 攻击面扩大: 本周 Bastien 发现 SDP XML 解析器和 AVRCP 协议栈各有一个 OOB 漏洞,都是经过多年稳定的代码,说明用户态协议栈的 fuzzing 覆盖仍需加强。