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

Published Sep 24, 2026
·
Updated

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

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

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

Possible race: 'hciupdatepassivescansync' 'hcidiscoveryfilterclear' hdev->discovery.uuidcount = 0; <----------------------preempted-----------------------------> 'startservicediscovery' // Set uuidcount to value != 0 hdev->discovery.uuidcount = uuidcount; hdev->discovery.uuids = kmemdup(...); <----------------------preempted-----------------------------> spinlock(&hdev->discovery.lock); kfree(hdev->discovery.uuids); hdev->discovery.uuids = NULL; spinunlock(&hdev->discovery.lock);

Now uuids == NULL and uuidcount != 0. So 'mgmtdevicefound' -> 'isfiltermatch' -> 'eirhasuuids' receives non consistent discovery state, where NULL dereference of uuids happens.

To fix it let's add discovery.lock around every read/write of uuidcount, uuids pair of struct members. It is also important to assign uuidcount value only after success kmemdup() allocation in startservicediscovery(), otherwise uuids is NULL, because kmemdup failed, but uuidcount 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 hcirxwork [ ] pstate: 10400009 (nzcV daif +PAN -UAO -TCO -DIT -SSBS BTYPE=--) [ ] pc : eirhasuuids+0x2d8/0x590 [ ] lr : isfiltermatch+0x258/0x320 ... [ ] Call trace: [ ] eirhasuuids+0x2d8/0x590 [ ] isfiltermatch+0x258/0x320 [ ] mgmtdevicefound+0x5b0/0xafc [ ] processadvreport.part.0+0x8c8/0xf14 [ ] hcileadvreportevt+0x338/0x3f0 [ ] hcilemetaevt+0x1f0/0x4c8 [ ] hcieventpacket+0x440/0xc9c [ ] hcirxwork+0x44c/0xaf8 [ ] processonework+0x54c/0x103c [ ] workerthread+0x6c4/0x10c4 [ ] kthread+0x274/0x2ec [ ] retfromfork+0x10/0x20 [ ] Code: 14000004 91004021 eb14003f 54000180 (f9400024) [ ] ---[ end trace 0000000000000000 ]---

Affected Software

1 affected component
Linux Linux kernel

Remediation

Recommended actions to resolve this vulnerability, in priority order.

  1. Compensating control

    In the Linux kernel Bluetooth management discovery code, protect every read and write of hdev->discovery.uuid_count with discovery.lock, and assign a nonzero uuid_count only after kmemdup() successfully allocates hdev->discovery.uuids so the uuids and uuid_count members remain consistent.

Event History

Sep 24, 2026
CVE Published
via MITRE·03:51 PM
Data Sourced
via MITRE·03:51 PM
Description
Data Sourced
via NVD·04:17 PM
Description

Frequently Asked Questions

1

What conditions are required to trigger the crash?

The issue requires a race between Bluetooth discovery-state operations that leaves uuid_count nonzero while the uuids pointer is NULL. A device-found event can then reach the UUID filter matching path and dereference the NULL pointer.

2

What is the practical impact of successful triggering?

The described outcome is a NULL pointer dereference in the Linux kernel's Bluetooth management discovery handling. The provided information supports a crash or denial-of-service impact; it does not describe code execution or data disclosure.

3

What changes does the fix make?

The fix protects reads and writes of the discovery uuid_count and uuids pair with discovery.lock, preventing consumers from observing inconsistent state. It also assigns uuid_count only after the UUID array allocation succeeds.

Contact

SecAlerts Pty Ltd.
132 Wickham Terrace
Fortitude Valley,
QLD 4006, Australia
info@secalerts.co
By using SecAlerts services, you agree to our services end-user license agreement. This website is safeguarded by reCAPTCHA and governed by the Google Privacy Policy and Terms of Service. All names, logos, and brands of products are owned by their respective owners, and any usage of these names, logos, and brands for identification purposes only does not imply endorsement. If you possess any content that requires removal, please get in touch with us.
© 2026 SecAlerts Pty Ltd.
ABN: 70 645 966 203, ACN: 645 966 203