{"id":28511,"date":"2026-09-25T00:31:34","date_gmt":"2026-09-24T16:31:34","guid":{"rendered":"https:\/\/www.54iter.cn\/?vuln=cve-2026-93247"},"modified":"2026-09-25T00:31:34","modified_gmt":"2026-09-24T16:31:34","slug":"cve-2026-93247","status":"publish","type":"vuln","link":"https:\/\/www.54iter.cn\/?vuln=cve-2026-93247","title":{"rendered":"CVE-2026-93247 &#8211; In the Linux kernel, the following vulnerability has been resolved:\n\nBluetooth: mgmt: fix"},"content":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>Bluetooth: mgmt: fix &#8216;hdev-&gt;discovery.uuids&#8217; NULL dereference<\/p>\n<p>&#8216;uuid_count&#8217; member of struct &#8216;discovery_state&#8217; is assigned and read<br \/>\nwithout any locks, so there is a chance of situation when<br \/>\nuuid_count != 0, but uuids is NULL and there will be NULL pointer<br \/>\ndereference.<\/p>\n<p>Possible race:<br \/>\n&#8216;hci_update_passive_scan_sync&#8217;<br \/>\n  &#8216;hci_discovery_filter_clear&#8217;<br \/>\n    hdev-&gt;discovery.uuid_count = 0;<\/p>\n<p>                        &#8216;start_service_discovery&#8217;<br \/>\n                          \/\/ Set uuid_count to value != 0<br \/>\n                          hdev-&gt;discovery.uuid_count = uuid_count;<br \/>\n                          hdev-&gt;discovery.uuids = kmemdup(&#8230;);<\/p>\n<p>    spin_lock(&amp;hdev-&gt;discovery.lock);<br \/>\n    kfree(hdev-&gt;discovery.uuids);<br \/>\n    hdev-&gt;discovery.uuids = NULL;<br \/>\n    spin_unlock(&amp;hdev-&gt;discovery.lock);<\/p>\n<p>Now uuids == NULL and uuid_count != 0.<br \/>\nSo &#8216;mgmt_device_found&#8217; -&gt; &#8216;is_filter_match&#8217; -&gt; &#8216;eir_has_uuids&#8217; receives<br \/>\nnon consistent discovery state, where NULL dereference of uuids happens.<\/p>\n<p>To fix it let&#8217;s add discovery.lock around every read\/write of uuid_count,<br \/>\nuuids pair of struct members. It is also important to assign uuid_count<br \/>\nvalue only after success kmemdup() allocation in<br \/>\nstart_service_discovery(), otherwise uuids is NULL, because kmemdup failed,<br \/>\nbut uuid_count is already assigned to non zero value.<\/p>\n<p>The following panic happens:<\/p>\n<p>[ ] &#8212;&#8212;&#8212;&#8212;[ cut here ]&#8212;&#8212;&#8212;&#8212;<br \/>\n[ ] Unable to handle kernel NULL pointer dereference at virtual<br \/>\naddress 0000000000000000<br \/>\n[ ] Internal error: Oops: 0000000096000006 [#1] PREEMPT SMP<br \/>\n[ ] CPU: 0 PID: 15056 Comm: kworker\/u9:2<br \/>\n[ ] Workqueue: hci0 hci_rx_work<br \/>\n[ ] pstate: 10400009 (nzcV daif +PAN -UAO -TCO -DIT -SSBS BTYPE=&#8211;)<br \/>\n[ ] pc : eir_has_uuids+0x2d8\/0x590<br \/>\n[ ] lr : is_filter_match+0x258\/0x320<br \/>\n&#8230;<br \/>\n[ ] Call trace:<br \/>\n[ ]  eir_has_uuids+0x2d8\/0x590<br \/>\n[ ]  is_filter_match+0x258\/0x320<br \/>\n[ ]  mgmt_device_found+0x5b0\/0xafc<br \/>\n[ ]  process_adv_report.part.0+0x8c8\/0xf14<br \/>\n[ ]  hci_le_adv_report_evt+0x338\/0x3f0<br \/>\n[ ]  hci_le_meta_evt+0x1f0\/0x4c8<br \/>\n[ ]  hci_event_packet+0x440\/0xc9c<br \/>\n[ ]  hci_rx_work+0x44c\/0xaf8<br \/>\n[ ]  process_one_work+0x54c\/0x103c<br \/>\n[ ]  worker_thread+0x6c4\/0x10c4<br \/>\n[ ]  kthread+0x274\/0x2ec<br \/>\n[ ]  ret_from_fork+0x10\/0x20<br \/>\n[ ] Code: 14000004 91004021 eb14003f 54000180 (f9400024)<br \/>\n[ ] &#8212;[ end trace 0000000000000000 ]&#8212;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>Bluetooth: mgmt: fix &#8216;hdev-&gt;discovery.uuids&#8217; NULL dereference<\/p>\n<p>&#8216;uuid_count&#8217; member of struct &#8216;discovery_state&#8217; is assigned and read<\/p>\n","protected":false},"template":"","meta":[],"categories":[],"tags":[],"class_list":["post-28511","vuln","type-vuln","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/vuln\/28511","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/vuln"}],"about":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/types\/vuln"}],"wp:attachment":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=28511"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=28511"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=28511"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}