<?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>Wed, 30 Sep 2026 13:32:55 +0000</lastBuildDate>
    <item>
      <title>CVE-2026-63892 — thunderbolt: property: Reject dir_len &lt; 4 to prevent size_t underflow</title>
      <link>https://vulnerability.circl.lu/vuln/cve-2026-63892</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;thunderbolt: property: Reject dir_len &amp;lt; 4 to prevent size_t underflow&lt;/p&gt;
&lt;p&gt;On the non-root path, __tb_property_parse_dir() takes dir_len from
entry-&amp;gt;length (u16 widened to size_t).  Two distinct OOB conditions
follow when entry-&amp;gt;length &amp;lt; 4:&lt;/p&gt;
&lt;p&gt;1. The non-root path begins with kmemdup(&amp;amp;block[dir_offset],
   sizeof(*dir-&amp;gt;uuid), ...) which always reads 4 dwords from
   dir_offset.  tb_property_entry_valid() only enforces
   dir_offset + entry-&amp;gt;length &amp;lt;= block_len, so a crafted entry
   with dir_offset close to the end of the property block and
   entry-&amp;gt;length in 0..3 passes that gate but lets the UUID copy
   run off the block (e.g. dir_offset = 497, dir_len = 3 in a
   500-dword block reads block[497..501]).&lt;/p&gt;
&lt;p&gt;2. After the kmemdup, content_len = dir_len - 4 underflows size_t
   to ~SIZE_MAX, nentries becomes SIZE_MAX / 4, and the entry
   walk runs OOB on each iteration until an entry fails
   validation or the kernel oopses on an unmapped page.&lt;/p&gt;
&lt;p&gt;Reject dir_len &amp;lt; 4 on the non-root path *before* the UUID kmemdup,
which closes both holes.&lt;/p&gt;
&lt;p&gt;Also move INIT_LIST_HEAD(&amp;amp;dir-&amp;gt;properties) up to immediately after
the dir allocation so the new error-return path (and the existing
uuid-alloc failure path) calling tb_property_free_dir() sees a
walkable list rather than the zero-initialized NULL next/prev that
list_for_each_entry_safe() would oops on.&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;thunderbolt: property: Reject dir_len &amp;lt; 4 to prevent size_t underflow&lt;/p&gt;
&lt;p&gt;On the non-root path, __tb_property_parse_dir() takes dir_len from
entry-&amp;gt;length (u16 widened to size_t).  Two distinct OOB conditions
follow when entry-&amp;gt;length &amp;lt; 4:&lt;/p&gt;
&lt;p&gt;1. The non-root path begins with kmemdup(&amp;amp;block[dir_offset],
   sizeof(*dir-&amp;gt;uuid), ...) which always reads 4 dwords from
   dir_offset.  tb_property_entry_valid() only enforces
   dir_offset + entry-&amp;gt;length &amp;lt;= block_len, so a crafted entry
   with dir_offset close to the end of the property block and
   entry-&amp;gt;length in 0..3 passes that gate but lets the UUID copy
   run off the block (e.g. dir_offset = 497, dir_len = 3 in a
   500-dword block reads block[497..501]).&lt;/p&gt;
&lt;p&gt;2. After the kmemdup, content_len = dir_len - 4 underflows size_t
   to ~SIZE_MAX, nentries becomes SIZE_MAX / 4, and the entry
   walk runs OOB on each iteration until an entry fails
   validation or the kernel oopses on an unmapped page.&lt;/p&gt;
&lt;p&gt;Reject dir_len &amp;lt; 4 on the non-root path *before* the UUID kmemdup,
which closes both holes.&lt;/p&gt;
&lt;p&gt;Also move INIT_LIST_HEAD(&amp;amp;dir-&amp;gt;properties) up to immediately after
the dir allocation so the new error-return path (and the existing
uuid-alloc failure path) calling tb_property_free_dir() sees a
walkable list rather than the zero-initialized NULL next/prev that
list_for_each_entry_safe() would oops on.&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://vulnerability.circl.lu/vuln/cve-2026-63892</guid>
    </item>
  </channel>
</rss>
