CVE-2026-93247

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

State
Published
Severity
Not scored
Published
Sep 24, 2026
Updated
Oct 19, 2026
Reserved
Sep 17, 2026

Read the record on cve.org

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 ]---

Scores

The record has no CVSS score.

Weaknesses

The record names no weakness.

Affected Products

ProductVersions
LinuxLinux
  • 86f3dcd1f331cfd4fd7ec88906955134ec51afbe to before f02c01ccd12cb2b8a290077d4c90f29a6e109b16Affected
  • 7ce9bb0b95fc280e9212b8922590c492ca1d9c39 to before bbd262d2d750b67b15a5e1008d3848309c87e7a7Affected
  • 16852eccbdfaf41a666705e3f8be55cf2864c5ca to before 18fda026a13c5abd6c1e0dfd3549f490b73378fbAffected
  • 2935e556850e9c94d7a00adf14d3cd7fe406ac03 to before c3f63610bceaa182e4683b23cc47baf36b5f1496Affected
  • 2935e556850e9c94d7a00adf14d3cd7fe406ac03 to before ee2135a14fb2a3e176149122764d293f0796b1ebAffected
  • 2935e556850e9c94d7a00adf14d3cd7fe406ac03 to before 59eecbe2f2f38d8f3e1104bd11da97f9a2c58998Affected
  • a351ff6b8ecca4229afaa0d98042bead8de64799Affected
  • f8069f34c4c976786ded97498012225af87435d7Affected
  • 6.1.159 to before 6.1.188Affected
  • 6.6.117 to before 6.6.157Affected
  • 6.12.42 to before 6.12.110Affected
  • 6.15.10 to before 6.16Affected
  • 6.16.1 to before 6.17Affected
LinuxLinux
  • 6.17Affected
  • before 6.17Not affected
  • 6.1.188 through 6.1.*Not affected
  • 6.6.157 through 6.6.*Not affected
  • 6.12.110 through 6.12.*Not affected
  • 6.18.52 through 6.18.*Not affected
  • 7.2.6 through 7.2.*Not affected
  • 7.3 and laterNot affected

References

Every record here comes from the CVE Program’s CVE List. © 1999–2026 The MITRE Corporation. CVE is a registered trademark of The MITRE Corporation. The records are reproduced under the CVE Program terms of use.