Commit cf25739
committed
mm/hugetlb: fix huge_pmd_unshare() vs GUP-fast race
jira VULN-71586
cve CVE-2025-38085
commit-author Jann Horn <[email protected]>
commit 1013af4
upstream-diff Stable 5.15 backport a3d864c901a300c295692d129159fc3001a56185
was used for the actual (clean) cherry-pick.
huge_pmd_unshare() drops a reference on a page table that may have
previously been shared across processes, potentially turning it into a
normal page table used in another process in which unrelated VMAs can
afterwards be installed.
If this happens in the middle of a concurrent gup_fast(), gup_fast() could
end up walking the page tables of another process. While I don't see any
way in which that immediately leads to kernel memory corruption, it is
really weird and unexpected.
Fix it with an explicit broadcast IPI through tlb_remove_table_sync_one(),
just like we do in khugepaged when removing page tables for a THP
collapse.
Link: https://lkml.kernel.org/r/[email protected]
Link: https://lkml.kernel.org/r/[email protected]
Fixes: 39dde65 ("[PATCH] shared page table for hugetlb page")
Signed-off-by: Jann Horn <[email protected]>
Reviewed-by: Lorenzo Stoakes <[email protected]>
Cc: Liam Howlett <[email protected]>
Cc: Muchun Song <[email protected]>
Cc: Oscar Salvador <[email protected]>
Cc: Vlastimil Babka <[email protected]>
Cc: <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
(cherry picked from commit 1013af4)
Signed-off-by: Marcin Wcisło <[email protected]>1 parent e4c8f85 commit cf25739
1 file changed
+7
-0
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
6778 | 6778 | | |
6779 | 6779 | | |
6780 | 6780 | | |
| 6781 | + | |
| 6782 | + | |
| 6783 | + | |
| 6784 | + | |
| 6785 | + | |
| 6786 | + | |
| 6787 | + | |
6781 | 6788 | | |
6782 | 6789 | | |
6783 | 6790 | | |
| |||
0 commit comments