<?xml version='1.0' encoding='UTF-8'?>
<?xml-stylesheet href="/static/style.xsl" type="text/xsl"?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" version="2.0">
  <channel>
    <title>Most recent entries from all</title>
    <link>https://vulnerability.circl.lu</link>
    <description>Contains only the most 10 recent entries.</description>
    <docs>http://www.rssboard.org/rss-specification</docs>
    <generator>python-feedgen</generator>
    <language>en</language>
    <lastBuildDate>Tue, 29 Sep 2026 04:52:44 +0000</lastBuildDate>
    <item>
      <title>CVE-2026-93247 — Bluetooth: mgmt: fix 'hdev-&gt;discovery.uuids' NULL dereference</title>
      <link>https://vulnerability.circl.lu/vuln/cve-2026-93247</link>
      <description>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; Linux&lt;/p&gt;
&lt;p&gt;In the Linux kernel, the following vulnerability has been resolved:&lt;/p&gt;
&lt;p&gt;Bluetooth: mgmt: fix &amp;#39;hdev-&amp;gt;discovery.uuids&amp;#39; NULL dereference&lt;/p&gt;
&lt;p&gt;&amp;#39;uuid_count&amp;#39; member of struct &amp;#39;discovery_state&amp;#39; 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.&lt;/p&gt;
&lt;p&gt;Possible race:
&amp;#39;hci_update_passive_scan_sync&amp;#39;
  &amp;#39;hci_discovery_filter_clear&amp;#39;
    hdev-&amp;gt;discovery.uuid_count = 0;
      &amp;lt;----------------------preempted-----------------------------&amp;gt;
                        &amp;#39;start_service_discovery&amp;#39;
                          // Set uuid_count to value != 0
                          hdev-&amp;gt;discovery.uuid_count = uuid_count;
                          hdev-&amp;gt;discovery.uuids = kmemdup(...);
      &amp;lt;----------------------preempted-----------------------------&amp;gt;
    spin_lock(&amp;amp;hdev-&amp;gt;discovery.lock);
    kfree(hdev-&amp;gt;discovery.uuids);
    hdev-&amp;gt;discovery.uuids = NULL;
    spin_unlock(&amp;amp;hdev-&amp;gt;discovery.lock);&lt;/p&gt;
&lt;p&gt;Now uuids == NULL and uuid_count != 0.
So &amp;#39;mgmt_device_found&amp;#39; -&amp;gt; &amp;#39;is_filter_match&amp;#39; -&amp;gt; &amp;#39;eir_has_uuids&amp;#39; receives
non consistent discovery state, where NULL dereference of uuids happens.&lt;/p&gt;
&lt;p&gt;To fix it let&amp;#39;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.&lt;/p&gt;
&lt;p&gt;The followin…&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; Linux&lt;/p&gt;
&lt;p&gt;In the Linux kernel, the following vulnerability has been resolved:&lt;/p&gt;
&lt;p&gt;Bluetooth: mgmt: fix &amp;#39;hdev-&amp;gt;discovery.uuids&amp;#39; NULL dereference&lt;/p&gt;
&lt;p&gt;&amp;#39;uuid_count&amp;#39; member of struct &amp;#39;discovery_state&amp;#39; 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.&lt;/p&gt;
&lt;p&gt;Possible race:
&amp;#39;hci_update_passive_scan_sync&amp;#39;
  &amp;#39;hci_discovery_filter_clear&amp;#39;
    hdev-&amp;gt;discovery.uuid_count = 0;
      &amp;lt;----------------------preempted-----------------------------&amp;gt;
                        &amp;#39;start_service_discovery&amp;#39;
                          // Set uuid_count to value != 0
                          hdev-&amp;gt;discovery.uuid_count = uuid_count;
                          hdev-&amp;gt;discovery.uuids = kmemdup(...);
      &amp;lt;----------------------preempted-----------------------------&amp;gt;
    spin_lock(&amp;amp;hdev-&amp;gt;discovery.lock);
    kfree(hdev-&amp;gt;discovery.uuids);
    hdev-&amp;gt;discovery.uuids = NULL;
    spin_unlock(&amp;amp;hdev-&amp;gt;discovery.lock);&lt;/p&gt;
&lt;p&gt;Now uuids == NULL and uuid_count != 0.
So &amp;#39;mgmt_device_found&amp;#39; -&amp;gt; &amp;#39;is_filter_match&amp;#39; -&amp;gt; &amp;#39;eir_has_uuids&amp;#39; receives
non consistent discovery state, where NULL dereference of uuids happens.&lt;/p&gt;
&lt;p&gt;To fix it let&amp;#39;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.&lt;/p&gt;
&lt;p&gt;The followin…&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://vulnerability.circl.lu/vuln/cve-2026-93247</guid>
    </item>
  </channel>
</rss>
