<?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 01:09:17 +0000</lastBuildDate>
    <item>
      <title>CVE-2026-90199 — fs/ntfs3: reject out-of-range evcn in mi_enum_attr()</title>
      <link>https://vulnerability.circl.lu/vuln/cve-2026-90199</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;fs/ntfs3: reject out-of-range evcn in mi_enum_attr()&lt;/p&gt;
&lt;p&gt;In mi_enum_attr(), the start/end VCN validation for non-resident
attributes is:&lt;/p&gt;
&lt;p&gt;if (svcn &amp;gt; evcn + 1) goto out;&lt;/p&gt;
&lt;p&gt;When evcn is U64_MAX the &amp;#34;evcn + 1&amp;#34; expression wraps to 0 and any svcn
passes the check. For evcn values close to U64_MAX (but not equal to it)
the right-hand side is still a meaningless near-wrap upper bound, so a
malformed on-disk attribute with svcn == 0 and evcn near U64_MAX can pass
mi_enum_attr() unrejected.&lt;/p&gt;
&lt;p&gt;VCN (virtual cluster number) is a cluster index, so any valid evcn is
bounded by the volume&amp;#39;s total cluster count, which ntfs3 holds in
sbi-&amp;gt;used.bitmap.nbits (set up in ntfs_init_from_boot() before any caller
of mi_enum_attr() runs). Reject evcn values that fall outside this range.&lt;/p&gt;
&lt;p&gt;However, an empty non-resident attribute (no allocated clusters) is
legitimately encoded with svcn == 0 and evcn == -1 (U64_MAX), e.g. via
attr-&amp;gt;nres.evcn = cpu_to_le64((u64)vcn - 1) with vcn == 0. That sentinel
must keep passing, so exclude evcn == U64_MAX from the range check. The
existing &amp;#34;svcn &amp;gt; evcn + 1&amp;#34; test still tolerates the sentinel (&amp;#34;0 &amp;gt; 0&amp;#34; is
false) and continues to require svcn == 0 for it, while the range check
rejects every other out-of-range evcn and thereby also defuses the
&amp;#34;evcn + 1&amp;#34; wraparound.&lt;/p&gt;
&lt;p&gt;svcn does not need its own bound: once evcn &amp;lt; nbits, &amp;#34;svcn &amp;gt; evcn + 1&amp;#34;
implies svcn &amp;lt;= nbits.&lt;/p&gt;
&lt;p&gt;[almaz.alexandrovich@paragon-software.com: fi…&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;fs/ntfs3: reject out-of-range evcn in mi_enum_attr()&lt;/p&gt;
&lt;p&gt;In mi_enum_attr(), the start/end VCN validation for non-resident
attributes is:&lt;/p&gt;
&lt;p&gt;if (svcn &amp;gt; evcn + 1) goto out;&lt;/p&gt;
&lt;p&gt;When evcn is U64_MAX the &amp;#34;evcn + 1&amp;#34; expression wraps to 0 and any svcn
passes the check. For evcn values close to U64_MAX (but not equal to it)
the right-hand side is still a meaningless near-wrap upper bound, so a
malformed on-disk attribute with svcn == 0 and evcn near U64_MAX can pass
mi_enum_attr() unrejected.&lt;/p&gt;
&lt;p&gt;VCN (virtual cluster number) is a cluster index, so any valid evcn is
bounded by the volume&amp;#39;s total cluster count, which ntfs3 holds in
sbi-&amp;gt;used.bitmap.nbits (set up in ntfs_init_from_boot() before any caller
of mi_enum_attr() runs). Reject evcn values that fall outside this range.&lt;/p&gt;
&lt;p&gt;However, an empty non-resident attribute (no allocated clusters) is
legitimately encoded with svcn == 0 and evcn == -1 (U64_MAX), e.g. via
attr-&amp;gt;nres.evcn = cpu_to_le64((u64)vcn - 1) with vcn == 0. That sentinel
must keep passing, so exclude evcn == U64_MAX from the range check. The
existing &amp;#34;svcn &amp;gt; evcn + 1&amp;#34; test still tolerates the sentinel (&amp;#34;0 &amp;gt; 0&amp;#34; is
false) and continues to require svcn == 0 for it, while the range check
rejects every other out-of-range evcn and thereby also defuses the
&amp;#34;evcn + 1&amp;#34; wraparound.&lt;/p&gt;
&lt;p&gt;svcn does not need its own bound: once evcn &amp;lt; nbits, &amp;#34;svcn &amp;gt; evcn + 1&amp;#34;
implies svcn &amp;lt;= nbits.&lt;/p&gt;
&lt;p&gt;[almaz.alexandrovich@paragon-software.com: fi…&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://vulnerability.circl.lu/vuln/cve-2026-90199</guid>
    </item>
  </channel>
</rss>
