{"id":6817,"date":"2026-09-04T18:49:18","date_gmt":"2026-09-04T10:49:18","guid":{"rendered":"https:\/\/www.54iter.cn\/?vuln=cve-2026-72175"},"modified":"2026-09-04T18:49:18","modified_gmt":"2026-09-04T10:49:18","slug":"cve-2026-72175","status":"publish","type":"vuln","link":"https:\/\/www.54iter.cn\/?vuln=cve-2026-72175","title":{"rendered":"CVE-2026-72175 [HIGH] &#8211; In the Linux kernel, the following vulnerability has been resolved:\n\nfs\/proc\/task_mmu: fix"},"content":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>fs\/proc\/task_mmu: fix make_uffd_wp_huge_pte() prot-update race<\/p>\n<p>Patch series &#8220;userfaultfd\/pagemap: pre-existing fixes&#8221;.<\/p>\n<p>These are pre-existing bug fixes that were carried at the front of the<br \/>\nuserfaultfd RWP working-set-tracking series up to v5 [1].  Per review<br \/>\nfeedback that fixes should not sit in the middle of a feature series, they<br \/>\nare split out and sent on their own; the RWP series is reposted rebased on<br \/>\ntop of this.<\/p>\n<p>All six were flagged by the Sashiko AI review of the RWP series and carry<br \/>\nindependent of RWP, apply to mm-new directly, and carry Cc: stable@.<\/p>\n<p>  1: fs\/proc\/task_mmu: a missing huge_ptep_modify_prot_start() in<br \/>\n     make_uffd_wp_huge_pte() can lose hardware Dirty\/Accessed updates<br \/>\n     when PAGEMAP_SCAN write-protects a hugetlb PTE.<\/p>\n<p>  2: fs\/proc\/task_mmu: pagemap_scan_hugetlb_entry() compares the range<br \/>\n     against HPAGE_SIZE rather than the hstate page size, so it never<br \/>\n     write-protects gigantic hugetlb pages.<\/p>\n<p>  3: fs\/proc\/task_mmu: PAGEMAP_SCAN with PM_SCAN_WP_MATCHING over an<br \/>\n     unpopulated hugetlb range self-deadlocks &#8212; pagemap_scan_pte_hole()<br \/>\n     calls uffd_wp_range() while walk_hugetlb_range() holds the hugetlb<br \/>\n     vma lock for read, and hugetlb_change_protection() then takes it<br \/>\n     for write. Install the marker inline instead.<\/p>\n<p>  4: mm\/huge_memory: change_non_present_huge_pmd() drops pmd_swp_uffd_wp<br \/>\n     on a device-private PMD permission downgrade, silently losing the<br \/>\n     uffd-wp marker.<\/p>\n<p>  5: userfaultfd: must_wait() applies pte_write() to a locklessly read<br \/>\n     PTE without checking pte_present(), so swap\/migration entries<br \/>\n     decode random offset bits and a thread can stay parked on a stale<br \/>\n     fault.<\/p>\n<p>  6: userfaultfd: __VMA_UFFD_FLAGS feeds VMA_UFFD_MINOR_BIT (41) to<br \/>\n     mk_vma_flags() unconditionally, an out-of-bounds write into the<br \/>\n     single-word vma_flags_t on 32-bit. Build the mask from config-gated<br \/>\n     per-mode masks so an unavailable bit is never materialised.<\/p>\n<p>This patch (of 6):<\/p>\n<p>make_uffd_wp_huge_pte() arms the UFFD_WP bit on a present HugeTLB PTE by<br \/>\ncalling huge_ptep_modify_prot_commit() with a ptent snapshot that was<br \/>\nfetched without the corresponding huge_ptep_modify_prot_start().  The<br \/>\nstart helper is what atomically clears the entry so the kernel-owned<br \/>\nsnapshot stays consistent until the commit; without it, the hardware may<br \/>\nset Dirty or Accessed in the live PTE between the original read and the<br \/>\ncommit, and huge_ptep_modify_prot_commit() (whose generic implementation<br \/>\njust calls set_huge_pte_at()) then writes the stale snapshot back over the<br \/>\nlive hardware bits, losing the update.<\/p>\n<p>The non-hugetlb sibling make_uffd_wp_pte() does this correctly via<br \/>\nptep_modify_prot_start() \/ ptep_modify_prot_commit().  Mirror that pattern<br \/>\nfor the present-PTE branch.  The migration case stays as-is &#8212; migration<br \/>\nentries are non-present, so there&#8217;s no hardware update to race against.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>fs\/proc\/task_mmu: fix make_uffd_wp_huge_pte() prot-update race<\/p>\n<p>Patch series &#8220;userfaultfd\/pagemap: pre-existing fixes&#8221;.<\/p>\n<p>These are <\/p>\n","protected":false},"template":"","meta":[],"categories":[],"tags":[],"class_list":["post-6817","vuln","type-vuln","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/vuln\/6817","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=6817"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=6817"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=6817"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}