CVE-2025-38084
Gravedad:
Pendiente de análisis
Tipo:
No Disponible / Otro tipo
Fecha de publicación:
28/06/2025
Última modificación:
28/06/2025
Descripción
*** Pendiente de traducción *** 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]
Impacto
Referencias a soluciones, herramientas e información
- 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