UBUNTU-CVE-2026-93247: Null Pointer Dereference
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
Remediation
Recommended actions to resolve this vulnerability, in priority order.
- Upgrade
Upgrade
ubuntu/linux-hwe-7.0to a version that resolves this vulnerability.Fixed in 7.0.0-42.42~24.04.1 - Upgrade
Upgrade
ubuntu/linux-riscv-7.0to a version that resolves this vulnerability.Fixed in 7.0.0-42.42.1~24.04.1 - Upgrade
Upgrade
ubuntu/linuxto a version that resolves this vulnerability.Fixed in 7.0.0-42.42 - Upgrade
Upgrade
ubuntu/linux-awsto a version that resolves this vulnerability.Fixed in 7.0.0-1016.17 - Upgrade
Upgrade
ubuntu/linux-gcpto a version that resolves this vulnerability.Fixed in 7.0.0-1016.18 - Upgrade
Upgrade
ubuntu/linux-ibmto a version that resolves this vulnerability.Fixed in 7.0.0-1017.17 - Upgrade
Upgrade
ubuntu/linux-oem-7.0to a version that resolves this vulnerability.Fixed in 7.0.0-1017.17 - Upgrade
Upgrade
ubuntu/linux-oracleto a version that resolves this vulnerability.Fixed in 7.0.0-1015.16 - Upgrade
Upgrade
ubuntu/linux-riscvto a version that resolves this vulnerability.Fixed in 7.0.0-42.42.1 - Compensating control
In the Linux kernel Bluetooth management code, protect every read and write of the discovery_state uuid_count and uuids pair with discovery.lock, and assign uuid_count only after kmemdup() successfully allocates uuids in start_service_discovery().