spin_lock(ptl);
        ptep = hugetlb_walk(vma, haddr, huge_page_size(h));
        if (likely(ptep && pte_same(huge_ptep_get(ptep), pte))) {
+               pte_t newpte = make_huge_pte(vma, &new_folio->page, !unshare);
+
                /* Break COW or unshare */
                huge_ptep_clear_flush(vma, haddr, ptep);
                mmu_notifier_invalidate_range(mm, range.start, range.end);
                page_remove_rmap(old_page, vma, true);
                hugepage_add_new_anon_rmap(new_folio, vma, haddr);
-               set_huge_pte_at(mm, haddr, ptep,
-                               make_huge_pte(vma, &new_folio->page, !unshare));
+               if (huge_pte_uffd_wp(pte))
+                       newpte = huge_pte_mkuffd_wp(newpte);
+               set_huge_pte_at(mm, haddr, ptep, newpte);
                folio_set_hugetlb_migratable(new_folio);
                /* Make the old page be freed below */
                new_folio = page_folio(old_page);