| From bippy-1.2.0 Mon Sep 17 00:00:00 2001 |
| From: Greg Kroah-Hartman <gregkh@kernel.org> |
| To: <linux-cve-announce@vger.kernel.org> |
| Reply-to: <cve@kernel.org>, <linux-kernel@vger.kernel.org> |
| Subject: CVE-2025-37918: Bluetooth: btusb: avoid NULL pointer dereference in skb_dequeue() |
| |
| Description |
| =========== |
| |
| In the Linux kernel, the following vulnerability has been resolved: |
| |
| Bluetooth: btusb: avoid NULL pointer dereference in skb_dequeue() |
| |
| A NULL pointer dereference can occur in skb_dequeue() when processing a |
| QCA firmware crash dump on WCN7851 (0489:e0f3). |
| |
| [ 93.672166] Bluetooth: hci0: ACL memdump size(589824) |
| |
| [ 93.672475] BUG: kernel NULL pointer dereference, address: 0000000000000008 |
| [ 93.672517] Workqueue: hci0 hci_devcd_rx [bluetooth] |
| [ 93.672598] RIP: 0010:skb_dequeue+0x50/0x80 |
| |
| The issue stems from handle_dump_pkt_qca() returning 0 even when a dump |
| packet is successfully processed. This is because it incorrectly |
| forwards the return value of hci_devcd_init() (which returns 0 on |
| success). As a result, the caller (btusb_recv_acl_qca() or |
| btusb_recv_evt_qca()) assumes the packet was not handled and passes it |
| to hci_recv_frame(), leading to premature kfree() of the skb. |
| |
| Later, hci_devcd_rx() attempts to dequeue the same skb from the dump |
| queue, resulting in a NULL pointer dereference. |
| |
| Fix this by: |
| 1. Making handle_dump_pkt_qca() return 0 on success and negative errno |
| on failure, consistent with kernel conventions. |
| 2. Splitting dump packet detection into separate functions for ACL |
| and event packets for better structure and readability. |
| |
| This ensures dump packets are properly identified and consumed, avoiding |
| double handling and preventing NULL pointer access. |
| |
| The Linux kernel CVE team has assigned CVE-2025-37918 to this issue. |
| |
| |
| Affected and fixed versions |
| =========================== |
| |
| Issue introduced in 6.4 with commit 20981ce2d5a5f79d17da1ace3a93df7b3c6ba3d6 and fixed in 6.6.90 with commit 2e8d44ebaa7babdd5c5ab50ca275826e241920d6 |
| Issue introduced in 6.4 with commit 20981ce2d5a5f79d17da1ace3a93df7b3c6ba3d6 and fixed in 6.12.28 with commit b70b41591ec48c78ec6a885e1f57bfc4029e5e13 |
| Issue introduced in 6.4 with commit 20981ce2d5a5f79d17da1ace3a93df7b3c6ba3d6 and fixed in 6.14.6 with commit 8563d9fabd8a4b726ba7acab4737c438bf11a059 |
| Issue introduced in 6.4 with commit 20981ce2d5a5f79d17da1ace3a93df7b3c6ba3d6 and fixed in 6.15 with commit 0317b033abcd1d8dd2798f0e2de5e84543d0bd22 |
| |
| Please see https://www.kernel.org for a full list of currently supported |
| kernel versions by the kernel community. |
| |
| Unaffected versions might change over time as fixes are backported to |
| older supported kernel versions. The official CVE entry at |
| https://cve.org/CVERecord/?id=CVE-2025-37918 |
| will be updated if fixes are backported, please check that for the most |
| up to date information about this issue. |
| |
| |
| Affected files |
| ============== |
| |
| The file(s) affected by this issue are: |
| drivers/bluetooth/btusb.c |
| |
| |
| Mitigation |
| ========== |
| |
| The Linux kernel CVE team recommends that you update to the latest |
| stable kernel version for this, and many other bugfixes. Individual |
| changes are never tested alone, but rather are part of a larger kernel |
| release. Cherry-picking individual commits is not recommended or |
| supported by the Linux kernel community at all. If however, updating to |
| the latest release is impossible, the individual changes to resolve this |
| issue can be found at these commits: |
| https://git.kernel.org/stable/c/2e8d44ebaa7babdd5c5ab50ca275826e241920d6 |
| https://git.kernel.org/stable/c/b70b41591ec48c78ec6a885e1f57bfc4029e5e13 |
| https://git.kernel.org/stable/c/8563d9fabd8a4b726ba7acab4737c438bf11a059 |
| https://git.kernel.org/stable/c/0317b033abcd1d8dd2798f0e2de5e84543d0bd22 |