<?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 19:58:01 +0000</lastBuildDate>
    <item>
      <title>CVE-2026-64418 — mm: shrinker: fix shrinker_info teardown race with expansion</title>
      <link>https://vulnerability.circl.lu/vuln/cve-2026-64418</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: shrinker: fix shrinker_info teardown race with expansion&lt;/p&gt;
&lt;p&gt;expand_shrinker_info() iterates all visible memcgs under shrinker_mutex,
including memcgs that have not finished -&amp;gt;css_online() yet.&lt;/p&gt;
&lt;p&gt;Once pn-&amp;gt;shrinker_info has been published, teardown must stay serialized
with expand_shrinker_info() until that memcg is either fully online or no
longer visible to iteration.  Today alloc_shrinker_info() breaks that rule
by dropping shrinker_mutex before freeing a partially initialized
shrinker_info array, which may cause the following race:&lt;/p&gt;
&lt;p&gt;CPU0                   CPU1
====                   ====&lt;/p&gt;
&lt;p&gt;css_create
--&amp;gt; list_add_tail_rcu(&amp;amp;css-&amp;gt;sibling, &amp;amp;parent_css-&amp;gt;children);
    online_css
    --&amp;gt; mem_cgroup_css_online
        --&amp;gt; alloc_shrinker_info
            --&amp;gt; alloc node0 info
                rcu_assign_pointer(C-&amp;gt;node0-&amp;gt;shrinker_info, old0)
                alloc node1 info -&amp;gt; FAIL -&amp;gt; goto err
                mutex_unlock(shrinker_mutex)&lt;/p&gt;
&lt;p&gt;shrinker_alloc()
                       --&amp;gt; shrinker_memcg_alloc
                           --&amp;gt; mutex_lock(shrinker_mutex)
                               expand_shrinker_info
                               --&amp;gt; mem_cgroup_iter see the memcg
                                   expand_one_shrinker_info
                                   --&amp;gt; old0 = C-&amp;gt;node0-&amp;gt;shrinker_info
                                       memcpy(new-&amp;gt;unit, old0-&amp;gt;unit, ...);…&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: shrinker: fix shrinker_info teardown race with expansion&lt;/p&gt;
&lt;p&gt;expand_shrinker_info() iterates all visible memcgs under shrinker_mutex,
including memcgs that have not finished -&amp;gt;css_online() yet.&lt;/p&gt;
&lt;p&gt;Once pn-&amp;gt;shrinker_info has been published, teardown must stay serialized
with expand_shrinker_info() until that memcg is either fully online or no
longer visible to iteration.  Today alloc_shrinker_info() breaks that rule
by dropping shrinker_mutex before freeing a partially initialized
shrinker_info array, which may cause the following race:&lt;/p&gt;
&lt;p&gt;CPU0                   CPU1
====                   ====&lt;/p&gt;
&lt;p&gt;css_create
--&amp;gt; list_add_tail_rcu(&amp;amp;css-&amp;gt;sibling, &amp;amp;parent_css-&amp;gt;children);
    online_css
    --&amp;gt; mem_cgroup_css_online
        --&amp;gt; alloc_shrinker_info
            --&amp;gt; alloc node0 info
                rcu_assign_pointer(C-&amp;gt;node0-&amp;gt;shrinker_info, old0)
                alloc node1 info -&amp;gt; FAIL -&amp;gt; goto err
                mutex_unlock(shrinker_mutex)&lt;/p&gt;
&lt;p&gt;shrinker_alloc()
                       --&amp;gt; shrinker_memcg_alloc
                           --&amp;gt; mutex_lock(shrinker_mutex)
                               expand_shrinker_info
                               --&amp;gt; mem_cgroup_iter see the memcg
                                   expand_one_shrinker_info
                                   --&amp;gt; old0 = C-&amp;gt;node0-&amp;gt;shrinker_info
                                       memcpy(new-&amp;gt;unit, old0-&amp;gt;unit, ...);…&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://vulnerability.circl.lu/vuln/cve-2026-64418</guid>
    </item>
  </channel>
</rss>
