All vulnerabilities
CVE-2026-93247

Linux: Bluetooth: mgmt: fix 'hdev->discovery.uuids' NULL dereference

Linux LinuxOperating systems
CVSS
NoneNot scored
ExploitationNo known exploitationNot in CISA KEV, which does not prove it is unexploitedCISA KEV
Exploit odds (EPSS)0.21%Chance of exploitation activity in the next 30 days, higher than 10% of CVEs. Scored 23 Oct 2026FIRST EPSS
Fixed in18fda026a13c5abd6c1e0dfd3549f490b73378fbAlso 59eecbe2f2f38d8f3e1104bd11da97f9a2c58998, 6.1.188 and 4 moreCVE List
Published24 Sep 2026Updated 19 Oct 2026CVE List

What fixes it

Show all 7 fixed versions

A fixed version on one release line is not the upgrade target for every line. Check your exact version and any vendor backports.

Description

In the Linux kernel, the following vulnerability has been resolved:

Bluetooth: mgmt: fix 'hdev->discovery.uuids' NULL dereference

'uuid_count' member of struct 'discovery_state' is assigned and read without any locks, so there is a chance of situation when uuid_count != 0, but uuids is NULL and there will be NULL pointer dereference.

Possible race: 'hci_update_passive_scan_sync' 'hci_discovery_filter_clear' hdev->discovery.uuid_count = 0; <----------------------preempted-----------------------------> 'start_service_discovery' // Set uuid_count to value != 0 hdev->discovery.uuid_count = uuid_count; hdev->discovery.uuids = kmemdup(...); <----------------------preempted-----------------------------> spin_lock(&hdev->discovery.lock); kfree(hdev->discovery.uuids); hdev->discovery.uuids = NULL; spin_unlock(&hdev->discovery.lock);

Now uuids == NULL and uuid_count != 0. So 'mgmt_device_found' -> 'is_filter_match' -> 'eir_has_uuids' receives non consistent discovery state, where NULL dereference of uuids happens.

To fix it let's add discovery.lock around every read/write of uuid_count, uuids pair of struct members. It is also important to assign uuid_count value only after success kmemdup() allocation in start_service_discovery(), otherwise uuids is NULL, because kmemdup failed, but uuid_count is already assigned to non zero value.

The following panic happens:

[ ] ------------[ cut here ]------------ [ ] Unable to handle kernel NULL pointer dereference at virtual address 0000000000000000 [ ] Internal error: Oops: 0000000096000006 [#1] PREEMPT SMP [ ] CPU: 0 PID: 15056 Comm: kworker/u9:2 [ ] Workqueue: hci0 hci_rx_work [ ] pstate: 10400009 (nzcV daif +PAN -UAO -TCO -DIT -SSBS BTYPE=--) [ ] pc : eir_has_uuids+0x2d8/0x590 [ ] lr : is_filter_match+0x258/0x320 ... [ ] Call trace: [ ] eir_has_uuids+0x2d8/0x590 [ ] is_filter_match+0x258/0x320 [ ] mgmt_device_found+0x5b0/0xafc [ ] process_adv_report.part.0+0x8c8/0xf14 [ ] hci_le_adv_report_evt+0x338/0x3f0 [ ] hci_le_meta_evt+0x1f0/0x4c8 [ ] hci_event_packet+0x440/0xc9c [ ] hci_rx_work+0x44c/0xaf8 [ ] process_one_work+0x54c/0x103c [ ] worker_thread+0x6c4/0x10c4 [ ] kthread+0x274/0x2ec [ ] ret_from_fork+0x10/0x20 [ ] Code: 14000004 91004021 eb14003f 54000180 (f9400024) [ ] ---[ end trace 0000000000000000 ]---

Text from CVE List

Affected versions 21

  • Linuxaffected: 86f3dcd1f331cfd4fd7ec88906955134ec51afbe before f02c01ccd12cb2b8a290077d4c90f29a6e109b16CVE List
  • Linuxaffected: 7ce9bb0b95fc280e9212b8922590c492ca1d9c39 before bbd262d2d750b67b15a5e1008d3848309c87e7a7CVE List
  • Linuxaffected: 16852eccbdfaf41a666705e3f8be55cf2864c5ca before 18fda026a13c5abd6c1e0dfd3549f490b73378fbCVE List
  • Linuxaffected: 2935e556850e9c94d7a00adf14d3cd7fe406ac03 before c3f63610bceaa182e4683b23cc47baf36b5f1496CVE List
  • Linuxaffected: 2935e556850e9c94d7a00adf14d3cd7fe406ac03 before ee2135a14fb2a3e176149122764d293f0796b1ebCVE List
  • Linuxaffected: 2935e556850e9c94d7a00adf14d3cd7fe406ac03 before 59eecbe2f2f38d8f3e1104bd11da97f9a2c58998CVE List
  • Linuxaffected: a351ff6b8ecca4229afaa0d98042bead8de64799CVE List
  • Linuxaffected: f8069f34c4c976786ded97498012225af87435d7CVE List
  • Linuxaffected: 6.1.159 before 6.1.188CVE List
  • Linuxaffected: 6.6.117 before 6.6.157CVE List
  • Linuxaffected: 6.12.42 before 6.12.110CVE List
  • Linuxaffected: 6.15.10 before 6.16CVE List
  • Linuxaffected: 6.16.1 before 6.17CVE List
  • Linuxaffected: 6.17CVE List
  • Linuxunaffected: all versions before 6.17CVE List
  • Linuxunaffected: 6.1.188 through 6.1.*CVE List
  • Linuxunaffected: 6.6.157 through 6.6.*CVE List
  • Linuxunaffected: 6.12.110 through 6.12.*CVE List
  • Linuxunaffected: 6.18.52 through 6.18.*CVE List
  • Linuxunaffected: 7.2.6 through 7.2.*CVE List
  • Linuxunaffected: 7.3CVE List

References 6