{"id":7518,"date":"2026-09-04T18:49:35","date_gmt":"2026-09-04T10:49:35","guid":{"rendered":"https:\/\/www.54iter.cn\/?vuln=cve-2026-74518"},"modified":"2026-09-04T18:49:35","modified_gmt":"2026-09-04T10:49:35","slug":"cve-2026-74518","status":"publish","type":"vuln","link":"https:\/\/www.54iter.cn\/?vuln=cve-2026-74518","title":{"rendered":"CVE-2026-74518 [HIGH] &#8211; In the Linux kernel, the following vulnerability has been resolved:\n\nmm\/hugetlb: fix list"},"content":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>mm\/hugetlb: fix list corruption in allocate_file_region_entries()<\/p>\n<p>allocate_file_region_entries() tops up resv-&gt;region_cache with freshly<br \/>\nallocated file_region descriptors.  The allocation uses GFP_KERNEL, so<br \/>\nresv-&gt;lock is dropped around it: the new entries are gathered on a<br \/>\nstack-local list head, allocated_regions, and spliced into<br \/>\nresv-&gt;region_cache once the lock is re-acquired.<\/p>\n<p>The splice used list_splice(), which moves the entries but does not<br \/>\nre-initialize the source head, so allocated_regions is left pointing at an<br \/>\nentry that now lives on resv-&gt;region_cache.  The top-up runs in a while<br \/>\nloop that re-checks the cache deficit after re-acquiring the lock.  For a<br \/>\nshared mapping the resv_map is shared by every mapper of the hugetlbfs<br \/>\ninode, so a concurrent region_chg()\/region_add()\/region_del() on the same<br \/>\nresv_map can consume cache entries during the unlocked window and force a<br \/>\nsecond iteration.  That iteration calls list_add() on the stale head and<br \/>\ncorrupts the list; with CONFIG_DEBUG_LIST the __list_add_valid() check<br \/>\ntrips:<\/p>\n<p>  list_add corruption. next-&gt;prev should be prev (ffffc900011ff7f8),<br \/>\n  but was ffff88814c281460. (next=ffff88814c545640).<br \/>\n  kernel BUG at lib\/list_debug.c:31!<br \/>\n   allocate_file_region_entries+0x191\/0x420<br \/>\n   region_chg+0x267\/0x300<br \/>\n   hugetlb_reserve_pages+0x387\/0xc80<br \/>\n   hugetlbfs_file_mmap+0x2ce\/0x3f0<br \/>\n   mmap_region+0x1348\/0x1a80<br \/>\n   do_mmap+0x85e\/0xb90<br \/>\n   vm_mmap_pgoff+0x18c\/0x330<br \/>\n   ksys_mmap_pgoff+0x2a1\/0x3e0<br \/>\n   do_syscall_64+0xd7\/0x420<\/p>\n<p>Without CONFIG_DEBUG_LIST the bad list_add() silently links a kernel-stack<br \/>\naddress into resv-&gt;region_cache, leading to later use-after-free.<\/p>\n<p>This was observed as a real host panic on a dense KVM host where a QEMU<br \/>\nguest-RAM hugetlbfs file was mapped MAP_SHARED by both QEMU and a separate<br \/>\nSPDK\/DPDK vhost-user target, generating concurrent region_* traffic on one<br \/>\nshared resv_map.<\/p>\n<p>Use list_splice_init() so the source head is re-initialized empty after<br \/>\neach splice, making the retry loop safe.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>mm\/hugetlb: fix list corruption in allocate_file_region_entries()<\/p>\n<p>allocate_file_region_entries() tops up resv-&gt;region_cache with f<\/p>\n","protected":false},"template":"","meta":[],"categories":[],"tags":[],"class_list":["post-7518","vuln","type-vuln","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/vuln\/7518","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=7518"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=7518"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=7518"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}