Skip to main content
VulnerabilityPublished Updated

CVE-2025-38554: Linux kernel · mm: fix a UAF when vma->mm is freed after vma->vm_refcnt got dropped

Affects Linux kernelSource GCVE Database

0

Not known to be exploited · CVSS 7.8 High.

Data as of 26 Oct 2026, 17:16 UTC

CVSS 3.1 base score
7.8High
How severe the flaw is on the 0–10 CVSS scale.
EPSS
0.1% chance of exploitation in 30 days – higher than 6% of CVEsExploit Prediction Scoring System: the likelihood attackers will use this flaw soon.
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H

Exploitation evidence

  1. Disclosed: evidence found.

    CVE published 19 Aug 2025

  2. Detectable: no evidence on record.

    No public nuclei template indexed

  3. Weaponised: no evidence on record.

    No public exploit code indexed in Metasploit or Exploit-DB

  4. Exploited in the wild: no evidence on record.

    Not in CISA KEV and no source reports exploitation

  5. Observed by OffSeq Mirage: no evidence on record.

    No attack traffic recorded by OffSeq Mirage sensors

A missing step is not evidence of safety. Sources: cve.org (opens in a new tab), the Metasploit, Exploit-DB and nuclei-templates index as of 26 Oct 2026.

What to do

Affected software

ProductAffectedFixed in
Ubuntu 24.04 LTSlinux-azure-6.11pkg:deb/ubuntu/linux-azure-6.11?arch=source&distro=nobleOther threatsAffected
  • 6.11.0-1008.8~24.04.1 – 6.11.0-1018.18~24.04.1
7 affected builds
Fixed in–
Ubuntu 24.04 LTSlinux-gcp-6.11pkg:deb/ubuntu/linux-gcp-6.11?arch=source&distro=nobleOther threatsAffected
  • 6.11.0-1006.6~24.04.2 – 6.11.0-1017.17~24.04.1
7 affected builds
Fixed in–
Ubuntu 24.04 LTSlinux-hwe-6.11pkg:deb/ubuntu/linux-hwe-6.11?arch=source&distro=nobleOther threatsAffected
  • 6.11.0-17.17~24.04.2 – 6.11.0-29.29~24.04.1
8 affected builds
Fixed in–
Ubuntu 24.04 LTSlinux-intelpkg:deb/ubuntu/linux-intel?arch=source&distro=nobleOther threatsAffected
  • =6.8.0-1005.12
  • =6.8.0-1006.13
  • =6.8.0-1007.14
Fixed in–
Ubuntu 24.04 LTSlinux-lowlatency-hwe-6.11pkg:deb/ubuntu/linux-lowlatency-hwe-6.11?arch=source&distro=nobleOther threatsAffected
  • 6.11.0-1009.10~24.04.1 – 6.11.0-1016.17~24.04.1
7 affected builds
Fixed in–
Ubuntu 24.04 LTSlinux-oem-6.8pkg:deb/ubuntu/linux-oem-6.8?arch=source&distro=nobleOther threatsAffected
  • 6.8.0-1003.3 – 6.8.0-1032.32
26 affected builds
Fixed in–

Check your own hosts for these packages with threat-finder (opens in a new tab), our free open-source scanner.

Description

In the Linux kernel, the following vulnerability has been resolved: mm: fix a UAF when vma->mm is freed after vma->vm_refcnt got dropped 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. Race description is borrowed from Jann'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->vm_refcnt (if it is in an acceptable range), and if this succeeds, vma_start_read() can return a recycled VMA. In this scenario where the VMA has been recycled, lock_vma_under_rcu() will then detect the mismatching ->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->vm_mm. This is wrong: It implicitly assumes that the caller is keeping the VMA's mm alive, but in this scenario the caller has no relation to the VMA's mm, so the rcuwait_wake_up() can cause UAF. The diagram depicting the race: T1 T2 T3 == == == lock_vma_under_rcu mas_walk <VMA gets removed from mm> mmap <the same VMA is reallocated> vma_start_read __refcount_inc_not_zero_limited_acquire munmap __vma_enter_locked refcount_add_not_zero vma_end_read vma_refcount_put __refcount_dec_and_test rcuwait_wait_event <finish operation> rcuwait_wake_up [UAF] Note that rcuwait_wait_event() in T3 does not block because refcount was already dropped by T1. At this point T3 can exit and free the mm causing UAF in T1. To avoid this we move vma->vm_mm verification into vma_start_read() and grab vma->vm_mm to stabilize it before vma_refcount_put() operation. [surenb@google.com: v3]

References

Community reviews

Loading reviews…