CVE-2025-40006
Severity CVSS v4.0:
Pending analysis
Type:
Unavailable / Other
Publication date:
20/10/2025
Last modified:
21/10/2025
Description
In the Linux kernel, the following vulnerability has been resolved:<br />
<br />
mm/hugetlb: fix folio is still mapped when deleted<br />
<br />
Migration may be raced with fallocating hole. remove_inode_single_folio<br />
will unmap the folio if the folio is still mapped. However, it&#39;s called<br />
without folio lock. If the folio is migrated and the mapped pte has been<br />
converted to migration entry, folio_mapped() returns false, and won&#39;t<br />
unmap it. Due to extra refcount held by remove_inode_single_folio,<br />
migration fails, restores migration entry to normal pte, and the folio is<br />
mapped again. As a result, we triggered BUG in filemap_unaccount_folio.<br />
<br />
The log is as follows:<br />
BUG: Bad page cache in process hugetlb pfn:156c00<br />
page: refcount:515 mapcount:0 mapping:0000000099fef6e1 index:0x0 pfn:0x156c00<br />
head: order:9 mapcount:1 entire_mapcount:1 nr_pages_mapped:0 pincount:0<br />
aops:hugetlbfs_aops ino:dcc dentry name(?):"my_hugepage_file"<br />
flags: 0x17ffffc00000c1(locked|waiters|head|node=0|zone=2|lastcpupid=0x1fffff)<br />
page_type: f4(hugetlb)<br />
page dumped because: still mapped when deleted<br />
CPU: 1 UID: 0 PID: 395 Comm: hugetlb Not tainted 6.17.0-rc5-00044-g7aac71907bde-dirty #484 NONE<br />
Hardware name: QEMU Ubuntu 24.04 PC (i440FX + PIIX, 1996), BIOS 0.0.0 02/06/2015<br />
Call Trace:<br />
<br />
dump_stack_lvl+0x4f/0x70<br />
filemap_unaccount_folio+0xc4/0x1c0<br />
__filemap_remove_folio+0x38/0x1c0<br />
filemap_remove_folio+0x41/0xd0<br />
remove_inode_hugepages+0x142/0x250<br />
hugetlbfs_fallocate+0x471/0x5a0<br />
vfs_fallocate+0x149/0x380<br />
<br />
Hold folio lock before checking if the folio is mapped to avold race with<br />
migration.
Impact
References to Advisories, Solutions, and Tools
- https://git.kernel.org/stable/c/21ee79ce938127f88fe07e409c1817f477dbe7ea
- https://git.kernel.org/stable/c/3e851448078f5b01f6264915df3cfef75e323a12
- https://git.kernel.org/stable/c/7b7387650dcf2881fd8bb55bcf3c8bd6c9542dd7
- https://git.kernel.org/stable/c/910d7749346c4b0acdc6e4adfdc4a9984281a206
- https://git.kernel.org/stable/c/91f548e920fbf8be3f285bfa3fa045ae017e836d
- https://git.kernel.org/stable/c/bc1c9ce8aeff45318332035dbef9713fb9e982d7
- https://git.kernel.org/stable/c/c1dc0524ab2cc3982d4e0d2bfac71a0cd4d65c39
- https://git.kernel.org/stable/c/c9c2a51f91aea70e89b496cac360cd795a2b3c26



