{"id":7476,"date":"2026-09-04T18:49:34","date_gmt":"2026-09-04T10:49:34","guid":{"rendered":"https:\/\/www.54iter.cn\/?vuln=cve-2026-74482"},"modified":"2026-09-04T18:49:34","modified_gmt":"2026-09-04T10:49:34","slug":"cve-2026-74482","status":"publish","type":"vuln","link":"https:\/\/www.54iter.cn\/?vuln=cve-2026-74482","title":{"rendered":"CVE-2026-74482 [HIGH] &#8211; In the Linux kernel, the following vulnerability has been resolved:\n\nmm\/huge_memory: unloc"},"content":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>mm\/huge_memory: unlock i_mmap_rwsem before releasing after-split folios<\/p>\n<p>__folio_split() keeps dereferencing the mapping after the split:<br \/>\nshmem_uncharge(mapping-&gt;host) and remap_page() while the folios are still<br \/>\nfrozen\/locked, and i_mmap_unlock_read(mapping) at the very end, after the<br \/>\nafter-split folios have been unlocked and freed.<\/p>\n<p>Nothing holds an inode reference across that.  The split relies on @folio<br \/>\n&#8212; which the beyond-EOF drop loop never removes, as it starts at<br \/>\nfolio_next(folio) &#8212; staying locked and in the page cache to hold off<br \/>\neviction.  But the unlock loop unlocks @folio before i_mmap_unlock_read()<br \/>\nruns.  If the caller&#8217;s @lock_at is a tail beyond EOF, as memory_failure()<br \/>\npasses when splitting a poisoned tail of a shmem THP that reaches past<br \/>\ni_size during truncation, it too is gone from the page cache; so once<br \/>\n@folio is unlocked no locked, in-cache folio pins the inode, and a<br \/>\nconcurrent final iput() can evict and RCU-free it before<br \/>\ni_mmap_unlock_read() touches i_mmap_rwsem:<\/p>\n<p>  BUG: KASAN: slab-use-after-free in __up_read+0x634\/0x790<br \/>\n   i_mmap_unlock_read include\/linux\/fs.h:537 [inline]<br \/>\n   __folio_split+0x732\/0x1640 mm\/huge_memory.c:4100<br \/>\n   try_to_split_thp_page+0xab\/0x390 mm\/memory-failure.c:1675<br \/>\n   memory_failure+0x1394\/0x26e0 mm\/memory-failure.c:2470<\/p>\n<p>  Freed by task 4601:<br \/>\n   shmem_free_in_core_inode+0x54\/0xb0 mm\/shmem.c:5177<br \/>\n   evict+0x57f\/0xac0 fs\/inode.c:870<\/p>\n<p>Do every mapping dereference while @folio still pins the inode: drop<br \/>\ni_mmap_rwsem right after remap_page(), before the loop that unlocks and<br \/>\nfrees the after-split folios, and clear @mapping so the exit path does not<br \/>\nunlock it again.  shmem_uncharge() and remap_page() already run before<br \/>\nthat point, so after this nothing past the unlock loop touches the inode<br \/>\nor the mapping.<\/p>\n<p>This is now a rule the split depends on, alongside keeping @folio frozen<br \/>\nuntil the page cache is updated: no inode or mapping dereference once the<br \/>\nafter-split folios start being unlocked.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>mm\/huge_memory: unlock i_mmap_rwsem before releasing after-split folios<\/p>\n<p>__folio_split() keeps dereferencing the mapping after the <\/p>\n","protected":false},"template":"","meta":[],"categories":[],"tags":[],"class_list":["post-7476","vuln","type-vuln","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/vuln\/7476","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/vuln"}],"about":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/types\/vuln"}],"wp:attachment":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=7476"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=7476"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=7476"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}