In the Linux kernel, the following vulnerability has been resolved:
mm/hugetlb: fix huge_pmd_unshare() vs GUP-fast race
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.
| Software | From | Fixed in |
|---|---|---|
| linux / linux_kernel | 2.6.20 | 5.10.239 |
| linux / linux_kernel | 5.11 | 5.15.186 |
| linux / linux_kernel | 5.16 | 6.1.142 |
| linux / linux_kernel | 6.2 | 6.6.95 |
| linux / linux_kernel | 6.7 | 6.12.35 |
| linux / linux_kernel | 6.13 | 6.15.4 |
| debian / debian_linux | 11.0 | 11.0.x |