<?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>Thu, 01 Oct 2026 20:13:11 +0000</lastBuildDate>
    <item>
      <title>CVE-2025-38554 — mm: fix a UAF when vma-&gt;mm is freed after vma-&gt;vm_refcnt got dropped</title>
      <link>https://vulnerability.circl.lu/vuln/cve-2025-38554</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: fix a UAF when vma-&amp;gt;mm is freed after vma-&amp;gt;vm_refcnt got dropped&lt;/p&gt;
&lt;p&gt;By inducing delays in the right places, Jann Horn created a reproducer for
a hard to hit UAF issue that became possible after VMAs were allowed to be
recycled by adding SLAB_TYPESAFE_BY_RCU to their cache.&lt;/p&gt;
&lt;p&gt;Race description is borrowed from Jann&amp;#39;s discovery report:
lock_vma_under_rcu() looks up a VMA locklessly with mas_walk() under
rcu_read_lock().  At that point, the VMA may be concurrently freed, and it
can be recycled by another process.  vma_start_read() then increments the
vma-&amp;gt;vm_refcnt (if it is in an acceptable range), and if this succeeds,
vma_start_read() can return a recycled VMA.&lt;/p&gt;
&lt;p&gt;In this scenario where the VMA has been recycled, lock_vma_under_rcu()
will then detect the mismatching -&amp;gt;vm_mm pointer and drop the VMA through
vma_end_read(), which calls vma_refcount_put().  vma_refcount_put() drops
the refcount and then calls rcuwait_wake_up() using a copy of vma-&amp;gt;vm_mm. 
This is wrong: It implicitly assumes that the caller is keeping the VMA&amp;#39;s
mm alive, but in this scenario the caller has no relation to the VMA&amp;#39;s mm,
so the rcuwait_wake_up() can cause UAF.&lt;/p&gt;
&lt;p&gt;The diagram depicting the race:
T1         T2         T3
==         ==         ==
lock_vma_under_rcu
  mas_walk
          &amp;lt;VMA gets removed from mm&amp;gt;
                      mmap
                        &amp;lt;the same VMA is reallocated&amp;gt;
  vma_start_read
    __refcount_inc_not_zero_…&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: fix a UAF when vma-&amp;gt;mm is freed after vma-&amp;gt;vm_refcnt got dropped&lt;/p&gt;
&lt;p&gt;By inducing delays in the right places, Jann Horn created a reproducer for
a hard to hit UAF issue that became possible after VMAs were allowed to be
recycled by adding SLAB_TYPESAFE_BY_RCU to their cache.&lt;/p&gt;
&lt;p&gt;Race description is borrowed from Jann&amp;#39;s discovery report:
lock_vma_under_rcu() looks up a VMA locklessly with mas_walk() under
rcu_read_lock().  At that point, the VMA may be concurrently freed, and it
can be recycled by another process.  vma_start_read() then increments the
vma-&amp;gt;vm_refcnt (if it is in an acceptable range), and if this succeeds,
vma_start_read() can return a recycled VMA.&lt;/p&gt;
&lt;p&gt;In this scenario where the VMA has been recycled, lock_vma_under_rcu()
will then detect the mismatching -&amp;gt;vm_mm pointer and drop the VMA through
vma_end_read(), which calls vma_refcount_put().  vma_refcount_put() drops
the refcount and then calls rcuwait_wake_up() using a copy of vma-&amp;gt;vm_mm. 
This is wrong: It implicitly assumes that the caller is keeping the VMA&amp;#39;s
mm alive, but in this scenario the caller has no relation to the VMA&amp;#39;s mm,
so the rcuwait_wake_up() can cause UAF.&lt;/p&gt;
&lt;p&gt;The diagram depicting the race:
T1         T2         T3
==         ==         ==
lock_vma_under_rcu
  mas_walk
          &amp;lt;VMA gets removed from mm&amp;gt;
                      mmap
                        &amp;lt;the same VMA is reallocated&amp;gt;
  vma_start_read
    __refcount_inc_not_zero_…&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://vulnerability.circl.lu/vuln/cve-2025-38554</guid>
    </item>
  </channel>
</rss>
