{"id":17473,"date":"2026-09-05T02:31:09","date_gmt":"2026-09-04T18:31:09","guid":{"rendered":"https:\/\/www.54iter.cn\/?vuln=cve-2026-80893"},"modified":"2026-09-05T02:31:09","modified_gmt":"2026-09-04T18:31:09","slug":"cve-2026-80893","status":"publish","type":"vuln","link":"https:\/\/www.54iter.cn\/?vuln=cve-2026-80893","title":{"rendered":"CVE-2026-80893 &#8211; In the Linux kernel, the following vulnerability has been resolved:\n\nmm\/hugetlb: fix swap"},"content":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>mm\/hugetlb: fix swap entry corruption when clearing uffd-wp at fork()<\/p>\n<p>copy_hugetlb_page_range() clears the uffd-wp bit of migration and hwpoison<br \/>\nentries with huge_pte_clear_uffd_wp(), which operates on the present-PTE<br \/>\nbit position.  Swap entries keep the uffd-wp state elsewhere &#8212; the<br \/>\nmigration branch reads and sets it with pte_swp_uffd_wp() and<br \/>\npte_swp_mkuffd_wp() &#8212; and the present-PTE position falls into the swap<br \/>\npayload.  On x86-64 it lands in the inverted swap offset, where a<br \/>\nnaturally-aligned hugetlb PFN always has the affected bit set, so the<br \/>\nclear advances the encoded PFN by two pages.<\/p>\n<p>No userfaultfd needs to be involved: the clear is guarded only by the<br \/>\nchild VMA not being uffd-wp registered, so a plain fork() with an<br \/>\nin-flight hugetlb migration entry (or a poisoned hugetlb page) corrupts<br \/>\nthe entry copied into the child.  Instrumenting the clear and forking<br \/>\nafter MADV_HWPOISON on a 2MB anon hugetlb page shows:<\/p>\n<p>  offset before=120e00<br \/>\n  offset after =120e02<\/p>\n<p>The fallout is mostly latent: rmap walks match migration entries by folio<br \/>\nrange and remove_migration_pte() rebuilds the PTE from the folio, so a<br \/>\nwithin-folio PFN skew heals once migration completes.  But any path that<br \/>\nre-encodes the corrupted offset &#8212; e.g.  hugetlb_change_protection()<br \/>\nrewriting a writable migration entry via<br \/>\nmake_readable_migration_entry(swp_offset(entry)) &#8212; propagates it.<\/p>\n<p>Migration entries legitimately carry uffd-wp, so clear it with<br \/>\npte_swp_clear_uffd_wp(), matching copy_nonpresent_pte() and<br \/>\nmove_huge_pte().<\/p>\n<p>A hwpoison entry, on the other hand, never carries the uffd-wp bit: it is<br \/>\ninstalled fresh by make_hwpoison_entry() (try_to_unmap_one() does not<br \/>\npreserve uffd-wp on the hwpoison path) and hugetlb_change_protection()<br \/>\nleaves hwpoison entries untouched.  There was nothing to clear there, only<br \/>\nthe corruption, so drop the clear entirely.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>mm\/hugetlb: fix swap entry corruption when clearing uffd-wp at fork()<\/p>\n<p>copy_hugetlb_page_range() clears the uffd-wp bit of migratio<\/p>\n","protected":false},"template":"","meta":[],"categories":[],"tags":[],"class_list":["post-17473","vuln","type-vuln","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/vuln\/17473","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=17473"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=17473"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=17473"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}