<?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 13:35:00 +0000</lastBuildDate>
    <item>
      <title>CVE-2026-97926 — ufs: validate cylinder group metadata before caching it</title>
      <link>https://vulnerability.circl.lu/vuln/cve-2026-97926</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;ufs: validate cylinder group metadata before caching it&lt;/p&gt;
&lt;p&gt;ufs_read_cylinder() copies the cylinder group index and the rotor
positions straight from the on-disk group and caches them without any
check:&lt;/p&gt;
&lt;p&gt;ucpi-&amp;gt;c_cgx    = fs32_to_cpu(sb, ucg-&amp;gt;cg_cgx);
	ucpi-&amp;gt;c_rotor  = fs32_to_cpu(sb, ucg-&amp;gt;cg_rotor);
	ucpi-&amp;gt;c_frotor = fs32_to_cpu(sb, ucg-&amp;gt;cg_frotor);
	ucpi-&amp;gt;c_irotor = fs32_to_cpu(sb, ucg-&amp;gt;cg_irotor);&lt;/p&gt;
&lt;p&gt;They are then used as indices during allocation and free:&lt;/p&gt;
&lt;p&gt;- c_cgx indexes the cylinder summary array as
    UFS_SB(sb)-&amp;gt;fs_cs(ucpi-&amp;gt;c_cgx), so a value past s_ncg writes a 32
    bit count outside the s_csp allocation.&lt;/p&gt;
&lt;p&gt;- c_frotor becomes a bitmap scan start, start = c_frotor &amp;gt;&amp;gt; 3, and
    then length = ((s_fpg + 7) &amp;gt;&amp;gt; 3) - start. A start beyond the block
    bitmap wraps the unsigned length to a huge value, so ubh_scanc()
    walks far past the cylinder group buffers. c_irotor drives the
    inode bitmap the same way.&lt;/p&gt;
&lt;p&gt;A crafted image can set any of these freely, turning an ordinary
allocation into an out of bounds access.&lt;/p&gt;
&lt;p&gt;Reject a cylinder group whose recorded index does not match the group
being read, or whose rotors fall outside the group, before the metadata
is cached. Valid filesystems keep cg_cgx equal to the group number and
the rotors within the group, so only malformed images are rejected.&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;ufs: validate cylinder group metadata before caching it&lt;/p&gt;
&lt;p&gt;ufs_read_cylinder() copies the cylinder group index and the rotor
positions straight from the on-disk group and caches them without any
check:&lt;/p&gt;
&lt;p&gt;ucpi-&amp;gt;c_cgx    = fs32_to_cpu(sb, ucg-&amp;gt;cg_cgx);
	ucpi-&amp;gt;c_rotor  = fs32_to_cpu(sb, ucg-&amp;gt;cg_rotor);
	ucpi-&amp;gt;c_frotor = fs32_to_cpu(sb, ucg-&amp;gt;cg_frotor);
	ucpi-&amp;gt;c_irotor = fs32_to_cpu(sb, ucg-&amp;gt;cg_irotor);&lt;/p&gt;
&lt;p&gt;They are then used as indices during allocation and free:&lt;/p&gt;
&lt;p&gt;- c_cgx indexes the cylinder summary array as
    UFS_SB(sb)-&amp;gt;fs_cs(ucpi-&amp;gt;c_cgx), so a value past s_ncg writes a 32
    bit count outside the s_csp allocation.&lt;/p&gt;
&lt;p&gt;- c_frotor becomes a bitmap scan start, start = c_frotor &amp;gt;&amp;gt; 3, and
    then length = ((s_fpg + 7) &amp;gt;&amp;gt; 3) - start. A start beyond the block
    bitmap wraps the unsigned length to a huge value, so ubh_scanc()
    walks far past the cylinder group buffers. c_irotor drives the
    inode bitmap the same way.&lt;/p&gt;
&lt;p&gt;A crafted image can set any of these freely, turning an ordinary
allocation into an out of bounds access.&lt;/p&gt;
&lt;p&gt;Reject a cylinder group whose recorded index does not match the group
being read, or whose rotors fall outside the group, before the metadata
is cached. Valid filesystems keep cg_cgx equal to the group number and
the rotors within the group, so only malformed images are rejected.&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://vulnerability.circl.lu/vuln/cve-2026-97926</guid>
    </item>
  </channel>
</rss>
