<?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>Mon, 28 Sep 2026 06:37:15 +0000</lastBuildDate>
    <item>
      <title>CVE-2026-74632 — mm/huge_memory: fix huge_zero_pfn race</title>
      <link>https://vulnerability.circl.lu/vuln/cve-2026-74632</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;mm/huge_memory: fix huge_zero_pfn race&lt;/p&gt;
&lt;p&gt;Patch series &amp;#34;mm/huge_memory: fix huge_zero_pfn race&amp;#34;, v2.&lt;/p&gt;
&lt;p&gt;There is a subtle race in the reference-counted huge_zero_folio
implementation.&lt;/p&gt;
&lt;p&gt;The fast path atomic logic fails to account for the fact that the shrinker
(which drops the final huge_zero_refcount pin) can overwrite huge_zero_pfn
with the ~0UL sentinel value in shrink_huge_zero_folio_scan() after a
racing get_huge_zero_folio() installed a valid value there.&lt;/p&gt;
&lt;p&gt;This results in huge_zero_folio being correctly set but huge_zero_pfn
being set incorrectly and thus is_huge_zero_pfn() and consequently
is_huge_zero_pmd() will misidentify the huge zero folio as being an
ordinary THP folio.&lt;/p&gt;
&lt;p&gt;This can result in the huge zero folio being split and otherwise treated
incorrectly.&lt;/p&gt;
&lt;p&gt;The solution to this is very subtle as there is an atomic fast path, and
thus ordering in weakly ordered architectures has to be treated very
carefully.&lt;/p&gt;
&lt;p&gt;The first commit fixes the issue by introducing a spinlock around
huge_zero_[pfn, folio, refcount] write, with careful consideration paid to
load/store ordering in the fast path.  It is placed first and kept as
small as possible so that it can be backported on its own.&lt;/p&gt;
&lt;p&gt;The second commit is a pure cleanup which reworks the
CONFIG_PERSISTENT_HUGE_ZERO_FOLIO logic to better separate the persistent
logic from the dynamically allocated one.&lt;/p&gt;
&lt;p&gt;This patch (of 2):&lt;/p&gt;
&lt;p&gt;If !CONFIG_PERSISTENT_HUGE_ZERO_FOLIO,…&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;mm/huge_memory: fix huge_zero_pfn race&lt;/p&gt;
&lt;p&gt;Patch series &amp;#34;mm/huge_memory: fix huge_zero_pfn race&amp;#34;, v2.&lt;/p&gt;
&lt;p&gt;There is a subtle race in the reference-counted huge_zero_folio
implementation.&lt;/p&gt;
&lt;p&gt;The fast path atomic logic fails to account for the fact that the shrinker
(which drops the final huge_zero_refcount pin) can overwrite huge_zero_pfn
with the ~0UL sentinel value in shrink_huge_zero_folio_scan() after a
racing get_huge_zero_folio() installed a valid value there.&lt;/p&gt;
&lt;p&gt;This results in huge_zero_folio being correctly set but huge_zero_pfn
being set incorrectly and thus is_huge_zero_pfn() and consequently
is_huge_zero_pmd() will misidentify the huge zero folio as being an
ordinary THP folio.&lt;/p&gt;
&lt;p&gt;This can result in the huge zero folio being split and otherwise treated
incorrectly.&lt;/p&gt;
&lt;p&gt;The solution to this is very subtle as there is an atomic fast path, and
thus ordering in weakly ordered architectures has to be treated very
carefully.&lt;/p&gt;
&lt;p&gt;The first commit fixes the issue by introducing a spinlock around
huge_zero_[pfn, folio, refcount] write, with careful consideration paid to
load/store ordering in the fast path.  It is placed first and kept as
small as possible so that it can be backported on its own.&lt;/p&gt;
&lt;p&gt;The second commit is a pure cleanup which reworks the
CONFIG_PERSISTENT_HUGE_ZERO_FOLIO logic to better separate the persistent
logic from the dynamically allocated one.&lt;/p&gt;
&lt;p&gt;This patch (of 2):&lt;/p&gt;
&lt;p&gt;If !CONFIG_PERSISTENT_HUGE_ZERO_FOLIO,…&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://vulnerability.circl.lu/vuln/cve-2026-74632</guid>
    </item>
  </channel>
</rss>
