CVE-2025-38084: mm/hugetlb: unshare page tables during VMA split, not before
In the Linux kernel, the following vulnerability has been resolved:
mm/hugetlb: unshare page tables during VMA split, not before
Currently, splitvma() triggers hugetlb page table unsharing through vmops->maysplit(). This happens before the VMA lock and rmap locks are taken - which is too early, it allows racing VMA-locked page faults in our process and racing rmap walks from other processes to cause page tables to be shared again before we actually perform the split.
Fix it by explicitly calling into the hugetlb unshare logic from splitvma() in the same place where THP splitting also happens. At that point, both the VMA and the rmap(s) are write-locked.
An annoying detail is that we can now call into the helper hugetlbunsharepmds() from two different locking contexts:
1. from hugetlbsplit(), holding: - mmap lock (exclusively) - VMA lock - file rmap lock (exclusively) 2. hugetlbunshareallpmds(), which I think is designed to be able to call us with only the mmap lock held (in shared mode), but currently only runs while holding mmap lock (exclusively) and VMA lock
Backporting note: This commit fixes a racy protection that was introduced in commit b30c14cd6102 ("hugetlb: unshare some PMDs when splitting VMAs"); that commit claimed to fix an issue introduced in 5.13, but it should actually also go all the way back.
[jannh: v2]
Other sources
In the Linux kernel, the following vulnerability has been resolved:
mm/hugetlb: unshare page tables during VMA split, not before
Currently, splitvma() triggers hugetlb page table unsharing through vmops->maysplit(). This happens before the VMA lock and rmap locks are taken - which is too early, it allows racing VMA-locked page faults in our process and racing rmap walks from other processes to cause page tables to be shared again before we actually perform the split.
Fix it by explicitly calling into the hugetlb unshare logic from splitvma() in the same place where THP splitting also happens. At that point, both the VMA and the rmap(s) are write-locked.
An annoying detail is that we can now call into the helper hugetlbunsharepmds() from two different locking contexts:
1. from hugetlbsplit(), holding: - mmap lock (exclusively) - VMA lock - file rmap lock (exclusively) 2. hugetlbunshareallpmds(), which I think is designed to be able to call us with only the mmap lock held (in shared mode), but currently only runs while holding mmap lock (exclusively) and VMA lock
Backporting note: This commit fixes a racy protection that was introduced in commit b30c14cd6102 ("hugetlb: unshare some PMDs when splitting VMAs"); that commit claimed to fix an issue introduced in 5.13, but it should actually also go all the way back.
[jannh@google.com: v2]
— MITRE
Affected Software
Remediation
Recommended actions to resolve this vulnerability, in priority order.
- Upgrade
Upgrade
debian/linuxto a version that resolves this vulnerability.Fixed in 6.1.176-1Fixed in 6.1.190-1Fixed in 6.12.107-1Fixed in 6.12.113-1Fixed in 7.2.12-1Fixed in 7.2.13-1
Event History
Frequently Asked Questions
What is the severity of CVE-2025-38084?
CVE-2025-38084 is classified as a high severity vulnerability in the Linux kernel.
Which versions of the Linux kernel are affected by CVE-2025-38084?
CVE-2025-38084 affects multiple versions of the Linux kernel, but specific version details should be referenced from the official release notes.
How do I fix CVE-2025-38084?
To mitigate CVE-2025-38084, you should update your Linux kernel to the patched version provided by your distribution.
What are the potential impacts of CVE-2025-38084?
Exploitation of CVE-2025-38084 can lead to memory corruption and may allow an attacker to escalate privileges.
Is CVE-2025-38084 actively being exploited in the wild?
As of now, there are no confirmed reports of active exploitation of CVE-2025-38084.