CVE-2025-38207
Severity CVSS v4.0:
Pending analysis
Type:
Unavailable / Other
Publication date:
04/07/2025
Last modified:
04/07/2025
Description
In the Linux kernel, the following vulnerability has been resolved:<br />
<br />
mm: fix uprobe pte be overwritten when expanding vma<br />
<br />
Patch series "Fix uprobe pte be overwritten when expanding vma".<br />
<br />
<br />
This patch (of 4):<br />
<br />
We encountered a BUG alert triggered by Syzkaller as follows:<br />
BUG: Bad rss-counter state mm:00000000b4a60fca type:MM_ANONPAGES val:1<br />
<br />
And we can reproduce it with the following steps:<br />
1. register uprobe on file at zero offset<br />
2. mmap the file at zero offset:<br />
addr1 = mmap(NULL, 2 * 4096, PROT_NONE, MAP_PRIVATE, fd, 0);<br />
3. mremap part of vma1 to new vma2:<br />
addr2 = mremap(addr1, 4096, 2 * 4096, MREMAP_MAYMOVE);<br />
4. mremap back to orig addr1:<br />
mremap(addr2, 4096, 4096, MREMAP_MAYMOVE | MREMAP_FIXED, addr1);<br />
<br />
In step 3, the vma1 range [addr1, addr1 + 4096] will be remap to new vma2<br />
with range [addr2, addr2 + 8192], and remap uprobe anon page from the vma1<br />
to vma2, then unmap the vma1 range [addr1, addr1 + 4096].<br />
<br />
In step 4, the vma2 range [addr2, addr2 + 4096] will be remap back to the<br />
addr range [addr1, addr1 + 4096]. Since the addr range [addr1 + 4096,<br />
addr1 + 8192] still maps the file, it will take vma_merge_new_range to<br />
expand the range, and then do uprobe_mmap in vma_complete. Since the<br />
merged vma pgoff is also zero offset, it will install uprobe anon page to<br />
the merged vma. However, the upcomming move_page_tables step, which use<br />
set_pte_at to remap the vma2 uprobe pte to the merged vma, will overwrite<br />
the newly uprobe pte in the merged vma, and lead that pte to be orphan.<br />
<br />
Since the uprobe pte will be remapped to the merged vma, we can remove the<br />
unnecessary uprobe_mmap upon merged vma.<br />
<br />
This problem was first found in linux-6.6.y and also exists in the<br />
community syzkaller:<br />
https://lore.kernel.org/all/000000000000ada39605a5e71711@google.com/T/