CVE-2025-38084
Severity CVSS v4.0:
Pending analysis
Type:
Unavailable / Other
Publication date:
28/06/2025
Last modified:
18/12/2025
Description
In the Linux kernel, the following vulnerability has been resolved:<br />
<br />
mm/hugetlb: unshare page tables during VMA split, not before<br />
<br />
Currently, __split_vma() triggers hugetlb page table unsharing through<br />
vm_ops->may_split(). This happens before the VMA lock and rmap locks are<br />
taken - which is too early, it allows racing VMA-locked page faults in our<br />
process and racing rmap walks from other processes to cause page tables to<br />
be shared again before we actually perform the split.<br />
<br />
Fix it by explicitly calling into the hugetlb unshare logic from<br />
__split_vma() in the same place where THP splitting also happens. At that<br />
point, both the VMA and the rmap(s) are write-locked.<br />
<br />
An annoying detail is that we can now call into the helper<br />
hugetlb_unshare_pmds() from two different locking contexts:<br />
<br />
1. from hugetlb_split(), holding:<br />
- mmap lock (exclusively)<br />
- VMA lock<br />
- file rmap lock (exclusively)<br />
2. hugetlb_unshare_all_pmds(), which I think is designed to be able to<br />
call us with only the mmap lock held (in shared mode), but currently<br />
only runs while holding mmap lock (exclusively) and VMA lock<br />
<br />
Backporting note:<br />
This commit fixes a racy protection that was introduced in commit<br />
b30c14cd6102 ("hugetlb: unshare some PMDs when splitting VMAs"); that<br />
commit claimed to fix an issue introduced in 5.13, but it should actually<br />
also go all the way back.<br />
<br />
[jannh@google.com: v2]
Impact
Base Score 3.x
5.50
Severity 3.x
MEDIUM
Vulnerable products and versions
| CPE | From | Up to |
|---|---|---|
| cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 2.6.20 (including) | 5.10.239 (excluding) |
| cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 5.11 (including) | 5.15.186 (excluding) |
| cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 5.16 (including) | 6.1.142 (excluding) |
| cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 6.2 (including) | 6.6.95 (excluding) |
| cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 6.7 (including) | 6.12.35 (excluding) |
| cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 6.13 (including) | 6.15.4 (excluding) |
| cpe:2.3:o:debian:debian_linux:11.0:*:*:*:*:*:*:* |
To consult the complete list of CPE names with products and versions, see this page
References to Advisories, Solutions, and Tools
- https://git.kernel.org/stable/c/081056dc00a27bccb55ccc3c6f230a3d5fd3f7e0
- https://git.kernel.org/stable/c/2511ac64bc1617ca716d3ba8464e481a647c1902
- https://git.kernel.org/stable/c/366298f2b04d2bf1f2f2b7078405bdf9df9bd5d0
- https://git.kernel.org/stable/c/8a21d5584826f4880f45bbf8f72375f4e6c0ff2a
- https://git.kernel.org/stable/c/9cf5b2a3b72c23fb7b84736d5d19ee6ea718762b
- https://git.kernel.org/stable/c/af6cfcd0efb7f051af221c418ec8b37a10211947
- https://git.kernel.org/stable/c/e8847d18cd9fff1edbb45e963d9141273c3b539c
- https://project-zero.issues.chromium.org/issues/420715744
- https://lists.debian.org/debian-lts-announce/2025/10/msg00007.html
- https://lists.debian.org/debian-lts-announce/2025/10/msg00008.html



