当前位置:首页>Linux>Linux社区bluetooth周动态(20260813~0819)

Linux社区bluetooth周动态(20260813~0819)

  • 2026-09-02 15:46:44
Linux社区bluetooth周动态(20260813~0819)

Linux 蓝牙子系统周报 (2026-08-13 ~ 2026-08-19)

统计概览

指标
数值
总邮件数
300
人类贡献邮件数
201
补丁系列数
~30+
安全修复类
10+
新功能/新驱动
5+

一、内核蓝牙子系统 (linux-bluetooth)

1. 安全修复

1.1 Bluetooth: ISO: fix use-after-free of listener socket in iso_conn_ready

  • • 作者: Hang Nan (2122295973@qq.com)
  • • 版本: v2 → v3 → v4
  • • 技术分析: 在 ISO 连接建立过程中,当 iso_conn_ready() 被调用时,如果监听 socket 已被并发关闭,hci_conn->sco->sk 可能指向已释放的 socket 对象。该问题根因在于 iso_conn_ready() 访问 listener->sk 时未持有适当的引用计数保护,导致 UAF。修复方案:在路径中增加 sock_hold()/sock_put() 保护或检查 socket 状态后再进行 sk->sk_state 判断。影响范围:所有使用 ISO 连接的蓝牙 LE Audio 场景。
  • • Luiz Augusto von Dentz 审阅: 确认 v3 版本存在残留问题,v4 在 iso_conn_ready() 入口处对 listener socket 增加 RCU 读锁保护。

1.2 Bluetooth: btnxpuart: Validate the FW dump header length

  • • 作者: Ali Ahmet Memis / Neeraj Kale (NXP)
  • • 版本: v1 → v2 → v3 → v4
  • • 技术分析: btnxpuart 驱动的固件转储(FW dump)功能中,从设备接收的 dump header 长度字段未做校验。攻击者可通过恶意固件或伪造设备包,提供超大的 header length 值,导致内核读取越界内存。修复:在 btnxpuart_fw_dump() 中增加对 header length 的边界检查,拒绝超过预期最大值的长度。BluezTestBot 自动测试确认回归测试通过。
  • • 影响范围: NXP 88W8987/8997 等使用 btnxpuart 驱动的设备。

1.3 Bluetooth: eir: Fix OOB read in eir_get_service_data()

  • • 作者: HyeongJun An (sammiee5311@gmail.com)
  • • 版本: v3
  • • 技术分析: eir_get_service_data() 函数在处理 Extended Inquiry Response (EIR) 数据时,未正确校验 UUID 长度字段,允许攻击者通过构造特制的 EIR 包触发越界读取(OOB read)。该函数被多个蓝牙协议栈上层调用,包括设备发现和服务发现过程。修复方式:在解析 EIR 数据前增加 eir_data_len 完整性校验,确保 UUID 及其数据字段在有效范围内。

1.4 Bluetooth: btintel: validate version TLV value lengths

  • • 作者: Laxman Acharya Padhya (acharyalaxman8848@gmail.com) / Ali Ahmet Memis
  • • 版本: v1 → v2 (系列 0/3-3/3)
  • • 技术分析: Intel 蓝牙控制器返回的版本 TLV(Type-Length-Value)信息中,value_length 字段未经验证直接用于内存拷贝操作。攻击者可通过提供 0 长度或超长 value 触发内核 OOB 访问。修复:在 btintel_version_info_tlv() 中增加对每个 TLV entry 的 value_length 边界检查,确保其在有效范围内,并拒绝无效的 TLV 条目。该修复是 Intel 蓝牙固件版本解析加固系列的一部分。

1.5 Bluetooth: btintel: bound firmware ID by TLV length

  • • 作者: Laxman Acharya Padhya
  • • 版本: v2 2/3
  • • 技术分析: 在解析 Intel 蓝牙控制器固件版本信息时,固件 ID(firmware ID)字段的读取长度未受 TLV 条目总长度的限制,可能导致读取超出 TLV 有效载荷的内存区域。修复:在拷贝 firmware ID 前,将读取范围限制在 tlv_length 之内。

1.6 Bluetooth: btintel: propagate version TLV parsing errors

  • • 作者: Laxman Acharya Padhya
  • • 版本: v2 3/3
  • • 技术分析: 此前 btintel 驱动在解析版本 TLV 时,即使遇到错误(如无效 TLV 条目)仍会返回部分成功状态,导致调用方认为版本信息有效。修复:将 TLV 解析错误向上传播,使上层调用者(如 hci_dev_open())能够检测到固件版本信息不可靠,从而采取降级或重试策略。

1.7 Bluetooth: btintel: Bound exception info print to the received length

  • • 作者: Ali Ahmet Memis
  • • 技术分析: Intel 蓝牙控制器异常信息打印时,exception_info 数据的拷贝长度未受实际接收数据长度的限制,在异常信息较短的场景下可能导致内核打印越界内存内容。修复:将打印长度限制为 skb->len 减去已解析的固定头部长度。

1.8 Bluetooth: btintel_pcie: fix double free of IRQ in remove()

  • • 作者: Gongwei Li (13875017792@163.com)
  • • 技术分析: btintel_pcie 驱动的 remove() 路径中,如果 btintel_pcie_free() 和 pci_free_irq_vectors() 都被调用,且中断请求线已被释放,再次释放会导致 double-free 安全漏洞。修复:在 remove() 中增加状态标志检查,确保每个 IRQ 只被释放一次。

1.9 Bluetooth: btintel_pcie: Fix array bounds check bugs

  • • 作者: ZhaoJinming (zhaojinming@uniontech.com)
  • • 技术分析: btintel_pcie 驱动的数组边界检查存在 off-by-one 或逻辑错误,可能允许越界数组访问。详细分析:在循环处理 PCIe 传输描述符时,索引检查使用了 >= 而非 > 或类似错误,导致数组最后一个元素之后的内存可被访问。

1.10 Bluetooth: hci_core: Return -ENOMEM when the sent_cmd clone fails

  • • 作者: Hans de Goede (johannes.goede@oss.qualcomm.com)
  • • 技术分析: hci_send_cmd_sync() 中,skb_clone() 失败时返回了 0(成功状态),而非 -ENOMEM,导致调用方认为命令发送成功。这可能导致命令超时等待或后续状态不一致。修复:将失败路径的返回值改为 -ENOMEM。

1.11 Bluetooth: hci_core: Handle skb_clone() failure in hci_send_cmd_sync()

  • • 作者: Hans de Goede
  • • 技术分析: 在 skb_clone() 返回 NULL 的情况下,hci_send_cmd_sync() 未正确处理 kfree_skb() 的传入 SKB,可能导致内存泄漏。修复:在 clone 失败路径中增加 kfree_skb() 调用。

1.12 Bluetooth: RFCOMM: Validate MTU in rfcomm_apply_pn() to prevent infinite loop

  • • 作者: (Luiz Augusto von Dentz 审阅回复)
  • • 技术分析: RFCOMM 协议参数协商中,如果对端设备发送了畸形的 MTU 值(如 0 或极小值),可能导致 rfcomm_apply_pn() 进入无限循环或资源耗尽。修复:在 rfcomm_apply_pn() 中增加 MTU 值的有效性验证,拒绝超出 [RFCOMM_MIN_MTU, RFCOMM_MAX_MTU] 范围的值。

1.13 Bluetooth: mgmt: reply to cancelled mgmt commands instead of silently dropping

  • • 作者: Shuai Zhang (shuai.zhang@oss.qualcomm.com)
  • • 版本: v2 → v3
  • • 技术分析: 当 management 命令被取消时(如 HCI 设备正在关闭),当前实现静默丢弃该命令,导致用户空间等待超时。修复:在 mgmt 命令取消路径中,向调用方返回明确的错误响应(如 MGMT_STATUS_CANCELLED),避免用户空间应用无响应。该问题影响所有使用 mgmt 接口的蓝牙管理工具(如 bluetoothctl)。

1.14 Bluetooth: cancel devcoredump work during device teardown

  • • 作者: Tristan Madani (tristmd@gmail.com)
  • • 技术分析: 在蓝牙设备注销过程中,如果 devcoredump 工作队列仍在运行,可能在设备数据结构已释放后继续访问,导致 UAF。修复:在 hci_unregister_dev() 中增加 cancel_work_sync() 调用,确保 devcoredump 工作已停止后再释放设备。

1.15 Bluetooth: btmtksdio: Fix out-of-bounds DMA read in the TX path

  • • 作者: Chris Lu (chris.lu@mediatek.com)
  • • 技术分析: MediaTek MT7925 SDIO 蓝牙的 TX 路径中,SKB 数据在 DMA 映射前未确保独占所有权,导致 DMA 引擎在 SKB 被其他上下文释放后仍读取其数据,造成 OOB DMA 读。修复:在 TX 前增加 skb_get() 确保 SKB 引用计数安全。

1.16 Bluetooth: hci_core: add lockdep check to hci_conn lookups

  • • 作者: Pauli Virtanen (pav@iki.fi)
  • • 技术分析: 在 hci_conn 查找路径中增加 lockdep 断言,以检测锁违规。这是对蓝牙连接管理并发安全性的加固措施,有助于发现潜在的竞争条件。

2. 新功能 / 新驱动

2.1 Bluetooth: btbcm: Add Synaptics 4384 chip support

  • • 作者: Kaihsin Chung (kaihsin.chung@synaptics.corp-partner.google.com)
  • • 版本: v1 → v2
  • • 技术分析: 新增对 Synaptics BCM4384 蓝牙控制器的支持。该芯片为 Broadcom IP 授权产品,集成了蓝牙 5.4+ 功能。btbcm 驱动需要添加对应的芯片 ID 和初始化序列。配套 dt-bindings 更新定义了 BCM4384 的设备树绑定。
  • • 审阅: Linus Walleij、Krzysztof Kozlowski、Paul Menzel 参与 review,讨论了芯片 ID 命名规范、dt-bindings 格式规范性等问题。

2.2 Bluetooth: btrtl: Add firmware format v3 support

  • • 作者: Hilda Wu (hildawu@realtek.com)
  • • 版本: v6
  • • 技术分析: Realtek 蓝牙控制器的新固件格式 v3 支持。v3 格式增加了新的配置段和扩展头部,支持 RTL8852BU 等新芯片的固件加载。btrtl 驱动需要识别 v3 格式头部,解析扩展字段,并调用相应的下载流程。

2.3 Bluetooth: btusb: treat 0bda:0002 as a generic HCI device

  • • 作者: Andrew Bille (andrewbille@gmail.com)
  • • 版本: v1 → v2 → v3
  • • 技术分析: USB ID 0bda:0002(Realtek 多协议控制器)在 btusb 驱动中未被正确识别,导致设备无法正常工作。该设备应被当作通用 HCI 设备处理。修复:在 btusb_table 中添加该 ID 的条目,跳过 Realtek 特定的初始化流程,使用通用 HCI 协议。

2.4 Bluetooth: hci_bcm4377: Ignore reserved PHY in ext adv reports on BCM4378

  • • 作者: Lorenzo Stoakes (ljs@kernel.org)
  • • 技术分析: BCM4378 固件在扩展广播报告中可能包含保留的 PHY 字段,这些字段值为特定保留值,不应被驱动解析。修复:在 hci_bcm4377 驱动的扩展广播报告处理中,过滤掉 PHY 值为保留字段的条目。

2.5 mediatek MT7925: update bluetooth firmware to 20260813113236

  • • 作者: Chris Lu (chris.lu@mediatek.com)
  • • 技术分析: 更新 MT7925 蓝牙固件到 20260813113236 版本,修复已知的固件问题。

2.6 Bluetooth: mt7925: recover subsystem-reset timeout through USB re-enumeration (RFC)

  • • 作者: George Maraveyas
  • • 技术分析: MT7925 在 warm reboot 后子系统复位超时的修复方案。通过 USB 核心的 device_schedule_reprobe() 接口触发设备重新枚举,恢复蓝牙功能。该方案为 RFC 状态,涉及 USB 核心层的 API 扩展。

3. 驱动子系统分析

3.1 btusb / 通用 USB

  • • btusb 运行时 PM 引用泄漏修复(Jiajia Liu)
  • • btusb 0bda:0002 通用 HCI 支持(Andrew Bille)
  • • btusb qca_dump_hdr DECLARE_FLEX_ARRAY() 改进(Jeremy Dean)

3.2 btnxpuart (NXP)

  • • FW dump header 长度校验(Ali Ahmet Memis / Neeraj Kale)
  • • FW dump header 保留在 coredump chunks 中(Neeraj Kale)
  • • 检测 M.2 连接器可用性(Sherry Sun)
  • • 本周最活跃的驱动模块,多个补丁迭代

3.3 btmtk / btmtksdio (MediaTek)

  • • btmtksdio TX 路径 OOB DMA 修复(Chris Lu)
  • • btmtk 子系统复位错误报告修复(Ismail Tarim)
  • • btmtk MT79xx WMT 操作日志改进(Jiajia Liu)
  • • MT7925 蓝牙固件更新(Chris Lu)

3.4 btintel / btintel_pcie (Intel)

  • • 版本 TLV 解析加固系列(Laxman Acharya Padhya / Ali Ahmet Memis)
  • • btintel_pcie IRQ double-free 修复
  • • btintel_pcie 数组边界检查修复

3.5 btbcm / btrtl (Broadcom/Realtek)

  • • btbcm 新增 BCM4384 支持(Kaihsin Chung)
  • • btrtl 新增固件格式 v3 支持(Hilda Wu)

3.6 hci_bcm4377 (Broadcom Apple)

  • • 扩展广播报告中保留 PHY 过滤(Lorenzo Stoakes)

3.7 hci_qca (Qualcomm)

  • • 基于 pwrseq 的电源可控性检测(pwrseq 系列一部分)

4. 核心协议栈

4.1 ISO 层

  • • use-after-free 修复(Hang Nan,多版本迭代)

4.2 HCI 核心

  • • ENOMEM 返回修复(Hans de Goede)
  • • skb_clone 失败处理(Hans de Goede)
  • • lockdep 检查(Pauli Virtanen)
  • • devcoredump 取消(Tristan Madani)

4.3 L2CAP

  • • 锁注解(Pauli Virtanen)

4.4 RFCOMM

  • • MTU 验证防止无限循环

4.5 Advertising / hci_event

  • • 取消连接后广告参数重试修复(Valentin Kindschi, 多版本迭代: v1→v2→v3→v4)
  • • 仅外围角色重新启用广告(v4 1/2)
  • • 仅在已创建连接时清除 HCI_LE_ADV(v4 2/2)
  • • 扫描地址更新时暂停广告(Valentin Kindschi)

4.6 mgmt

  • • 已取消命令回复修复(Shuai Zhang)

二、核外协议栈——BlueZ 用户空间专题

统计

模块
补丁数
主要改动
sdp-xml
10+
安全修复(类型混淆、栈溢出、内存泄漏、解析栈泄漏)
avrcp
4
OOB Read 修复、媒体名称修复
adv_monitor
2
缓冲区溢出修复
monitor
1
print_packet max_len 钳制
attib
1
smatch 警告修复
obexd
1
电话簿后端引用计数
shared/bap
1
服务端 Release 处理
media
1
avrcp-player 参数修复
CS Distance
5
新功能:CS Distance Provider 实现
doc
1
CS Distance 文档
unit/test
5+
SDP XML 测试
client/bluetoothctl
1
CS 距离显示支持
btsnoop
0
-
mesh
0
-
tools
0
-

安全修复(CRITICAL/HIGH)

CRITICAL: sdp-xml: Fix crash caused by type confusion when parsing crafted SDP XML

  • • 作者: Bastien Nocera (hadess@hadess.net)
  • • 版本: v4 2/9
  • • 技术分析: 当解析特制的 SDP XML 记录时,sdp_xml_parse_record() 中元素类型枚举与处理函数之间的映射存在类型混淆漏洞。攻击者可通过构造恶意的 SDP XML 文件,触发 element_end() 回调中错误类型的转换,导致空指针解引用或类型混淆崩溃。该漏洞可被利用来造成 BlueZ 守护进程拒绝服务(DoS)。修复:在 element_start() 中增加类型检查,确保数据类型与预期处理函数匹配。

CRITICAL: sdp-xml: Fix stack overflow when converting large sequences to XML

  • • 作者: Bastien Nocera
  • • 版本: v4 8/9
  • • 技术分析: sdp_xml_sequence_to_xml() 在处理深度嵌套的 SDP 序列时使用递归实现,未对递归深度设限。攻击者可以通过构造深度极大的嵌套序列,触发内核栈溢出,可能导致 BlueZ 守护进程崩溃或代码执行。修复:将递归实现改为迭代实现,或增加递归深度限制。

CRITICAL: sdp-xml: Fix leaking the parse stack on malformed input

  • • 作者: Luiz Augusto von Dentz (v1/v2)
  • • 技术分析: 当 SDP XML 解析器遇到格式错误的输入时,解析栈未能正确清理,导致栈内存泄漏。累积的泄漏可能耗尽 BlueZ 进程的内存资源。修复:在错误处理路径中增加 g_string_free() 和解析栈清理操作。

HIGH: sdp-xml: Fix memory leak when adding duplicate attributes

  • • 作者: Bastien Nocera
  • • 版本: v4 4/9
  • • 技术分析: 当 SDP XML 记录中包含重复属性时,sdp_xml_add_attribute() 在替换旧属性时未释放旧属性内存,导致内存泄漏。修复:在替换属性前先释放旧属性。

HIGH: sdp: Fix memory leak when freeing alternates

  • • 作者: Luiz Augusto von Dentz
  • • 版本: v1/v2 3/4
  • • 技术分析: sdp_free_record() 在释放具有 alternate 选项的记录时,未递归释放 alternate 子树中的属性,导致内存泄漏。修复:增加对 alternate 列表的递归释放。

HIGH: sdp-xml: Use a queue to collect sequence members

  • • 作者: Luiz Augusto von Dentz / Bastien Nocera
  • • 技术分析: 将 SDP XML 序列成员的收集从链表改为队列,解决顺序乱序问题,同时简化了内存管理。

HIGH: avrcp: Fix Out-of-Bounds Read in AVRCP GetFolderItems parsing

  • • 作者: Bastien Nocera
  • • 版本: v4
  • • CVE: 已向 oss-security 报告,CVE 请求中
  • • 技术分析: AVRCP GetFolderItems 响应解析中,parse_folder_items() 未正确验证 item length 字段,读取超出的内存区域。Elman Shahbazov 提交了正式的 CVE 请求。该 OOB Read 可被攻击者利用来泄露 BlueZ 进程内存中的敏感信息。修复:在解析每个 folder item 的 media/folder name 时,确保 name_length 不超出实际数据包长度。

MEDIUM: avrcp: Fix media/folder name not being set

  • • 作者: Bastien Nocera
  • • 技术分析: AVRCP 媒体/文件夹名称未正确设置到播放器状态中,导致 bluetoothctl 等客户端显示空名称。修复:在 avrcp_player.c 中增加名称拷贝逻辑。

MEDIUM: adv_monitor: Fix buffer overflow caused by integer overflow

  • • 作者: Bastien Nocera
  • • 版本: 1/2
  • • 技术分析: adv_monitor.c 中处理广告监测器的 pattern 数据时,整数溢出导致缓冲区分配不足,后续拷贝操作写越界。修复:在分配缓冲区前进行乘法溢出检查。

MEDIUM: adv_monitor: Ignore additional patterns past what's supported

  • • 作者: Bastien Nocera
  • • 版本: 2/2
  • • 技术分析: 当广告监测器收到超过支持数量的 pattern 时,当前实现会尝试处理所有 pattern,导致内存压力。修复:静默忽略超过最大支持的 pattern。

MEDIUM: monitor: clamp max_len in print_packet

  • • 作者: Chad Spensky (chad@allthenticate.com)
  • • 技术分析: print_packet() 中 max_len 参数未经钳制直接用于内存访问,在 max_len 大于实际数据长度时导致 OOB 读取。修复:将 max_len 钳制在 pkt->len 范围内。

MEDIUM: obexd: Reference count the phonebook back-end setup and teardown

  • • 作者: Paul Menzel (pmenzel@molgen.mpg.de)
  • • 技术分析: OBEX 电话簿(phonebook)后端在设置和拆卸过程中缺少引用计数,可能导致并发访问时电话簿后端被提前释放。修复:增加引用计数机制,确保最后一个引用释放后再执行拆卸。

LOW: avctp: Fix typo in comment

  • • 作者: Bastien Nocera
  • • 技术分析: avctp.c 中的注释存在拼写错误,修复注释以准确反映代码逻辑。

LOW: attrib: Fix smatch "non-ANSI function declaration" warning

  • • 作者: Bastien Nocera
  • • 技术分析: 修复 attrib/attrib.c 中非 ANSI 风格的函数声明,消除 smatch 静态分析警告。

新功能:CS Distance Provider

  • • 作者: Naga Bhavani Akella (naga.akella@oss.qualcomm.com)
  • • 版本: v2 系列 0/5-5/5
  • • 功能: 新增 Channel Sounding (CS) 距离提供者(Distance Provider)D-Bus API,支持蓝牙信道探测距离测量功能。
  • • 模块分布:
    • • doc/: 新增 org.bluez.CSDistance1、org.bluez.CSDistanceProvider、org.bluez.CSDistanceProviderManager 三个 D-Bus 接口文档
    • • rap/: 实现 CS Distance Provider D-Bus API 逻辑
    • • client/: bluetoothctl 增加 CS 距离显示支持
  • • Luiz 审阅: 讨论了 API 设计、命名规范、错误处理等问题。

其他

  • • shared/bap: kokimuk 提交补丁,修复 BAP 服务端在传输 IO 附着时的 Release 处理问题,确保在 IO 绑定后正确处理 Release 请求。
  • • media: Pauli Virtanen 修复 avrcp-player 中 lp_get_uid() 参数传递错误的问题。
  • • Bug 报告: Vanwezemael Kris 报告 bluetoothctl 中 hci.cmd 参数传递异常的问题,Luiz 回复定位到命令行解析逻辑。
  • • Bug 报告: nibbo 报告 MT7922 主动 LE 扫描无法捕获被动扫描中可见的 ADV_SCAN_IND 广播包。

四、总结

本周蓝牙子系统社区非常活跃,邮件总数达 300 封,人类贡献 201 封。安全修复数量显著增加,尤其是 BlueZ 用户空间方面:

  1. 1. 安全修复密集:SDP XML 解析器爆出多个安全漏洞(类型混淆、栈溢出、内存泄漏、解析栈泄漏),Bastien Nocera 和 Luiz von Dentz 完成了 v4 系列修复。AVRCP OOB Read 漏洞已有 CVE 请求。
  2. 2. btnxpuart 活跃:NXP 驱动的 FW dump 安全性加固是本周重点,多位贡献者参与迭代。
  3. 3. Intel 蓝牙加固:btintel 驱动的版本 TLV 解析全面加固,btintel_pcie 修复了 IRQ double-free 和数组边界问题。
  4. 4. 新硬件支持:Synaptics BCM4384 和 Realtek 固件格式 v3 的支持正在推进。
  5. 5. BlueZ CS Distance:Qualcomm 贡献者推进了 Channel Sounding 距离提供者功能的 D-Bus API 实现,蓝牙信道探测功能正在标准化进程中。
  6. 6. 广告参数重试循环修复:Valentin Kindschi 针对取消连接后广告参数无限重试的问题进行了多轮修复(v1→v4),最终方案在 v4 中区分了外围角色和中央角色的行为,同时解决了扫描地址更新时的广告暂停问题。

欢迎关注:

欢迎添加微信号入群交流:

如果有更多疑问或需要帮助,可点击下方卡片,让「东东的小站AI助手」为您实时答疑:支持24小时在线 ⬇️

更多请点击左下角 阅读原文!

最新文章

随机文章