All of lore.kernel.org
 help / color / mirror / Atom feed
From: sashiko-bot@kernel.org
To: "Tal Zussman" <tz2294@columbia.edu>,
	"Andrew Morton" <akpm@linux-foundation.org>,
	"Mike Rapoport" <rppt@kernel.org>, "Peter Xu" <peterx@redhat.com>,
	"James Houghton" <jthoughton@google.com>,
	"Andrea Arcangeli" <aarcange@redhat.com>,
	"Suren Baghdasaryan" <surenb@google.com>,
	"Balbir Singh" <balbirs@nvidia.com>,
	"Liam R. Howlett" <liam@infradead.org>,
	"Lorenzo Stoakes" <ljs@kernel.org>,
	"Vlastimil Babka" <vbabka@kernel.org>,
	"Jann Horn" <jannh@google.com>,
	"Pedro Falcato" <pfalcato@suse.de>,
	"Michał Mirosław" <mirq-linux@rere.qmqm.pl>,
	"Andrei Vagin" <avagin@gmail.com>,
	"Stephen Rothwell" <sfr@canb.auug.org.au>,
	"Arnd Bergmann" <arnd@arndb.de>,
	"Muhammad Usama Anjum" <usama.anjum@arm.com>,
	"David Hildenbrand" <david@kernel.org>, "Zi Yan" <ziy@nvidia.com>,
	"Matthew Brost" <matthew.brost@intel.com>,
	"Joshua Hahn" <joshua.hahnjy@gmail.com>,
	"Byungchul Park" <byungchul@sk.com>,
	"Gregory Price" <gourry@gourry.net>,
	"Ying Huang" <ying.huang@linux.alibaba.com>,
	"Alistair Popple" <apopple@nvidia.com>,
	"Baolin Wang" <baolin.wang@linux.alibaba.com>,
	"Nico Pache" <nico.pache@linux.dev>,
	"Ryan Roberts" <ryan.roberts@arm.com>,
	"Dev Jain" <dev.jain@arm.com>, "Barry Song" <baohua@kernel.org>,
	"Lance Yang" <lance.yang@linux.dev>,
	"Usama Arif" <usama.arif@linux.dev>,
	"Kiryl Shutsemau" <kas@kernel.org>,
	"Chris Down" <chris@chrisdown.name>,
	"Muchun Song" <muchun.song@linux.dev>,
	"Oscar Salvador" <osalvador@suse.de>,
	"Mikołaj Lenczewski" <miko.lenczewski@arm.com>,
	"Michal Hocko" <mhocko@suse.com>,
	"Mike Kravetz" <mike.kravetz@oracle.com>
Cc: linux-mm@kvack.org
Subject: Re: [PATCH 06/12] mm/huge_memory: build the moved huge zero PMD from the destination VMA
Date: Thu, 12 Nov 2026 17:57:03 +0000	[thread overview]
Message-ID: <sashiko-outbox-211648@kernel.org> (raw)
In-Reply-To: <20261111-uffd-state-fixes-v1-6-00713d368976@columbia.edu>

Thank you for your contribution! Sashiko AI review found no new issues
in this patch, but noticed 1 related pre-existing issue it does not
introduce:
- [Critical] mm: clean+writable PTEs and UFFD_WP bypass in
  move_present_ptes() [1]
--

commit a31e8bf5652b13454bb968641961e319c67afcd0
Author: Tal Zussman <tz2294@columbia.edu>

mm/huge_memory: build the moved huge zero PMD from the destination VMA

This commit builds the destination PMD for a moved huge zero page from
dst_vma->vm_page_prot instead of copying the source PMD.

> diff --git a/mm/huge_memory.c b/mm/huge_memory.c
> index 0d589be136d21..09176b290f768 100644
> --- a/mm/huge_memory.c
> +++ b/mm/huge_memory.c
> @@ -2981,9 +2981,9 @@ int move_pages_huge_pmd(struct mm_struct *mm, pmd_t *dst_pmd, pmd_t *src_pmd, pm
>  		/* Follow mremap() behavior and treat the entry dirty after the move */
>  		_dst_pmd = pmd_mkwrite(pmd_mkdirty(_dst_pmd), dst_vma);
>  	} else {
> -		src_pmdval = pmdp_huge_clear_flush(src_vma, src_addr, src_pmd);
> -		_dst_pmd = move_soft_dirty_pmd(src_pmdval);
> -		_dst_pmd = clear_uffd_wp_pmd(_dst_pmd);
> +		pmdp_huge_clear_flush(src_vma, src_addr, src_pmd);
> +		_dst_pmd = folio_mk_pmd(huge_zero_folio, dst_vma->vm_page_prot);
> +		_dst_pmd = move_soft_dirty_pmd(pmd_mkspecial(_dst_pmd));
>  	}

[Severity: Critical]
This problem wasn't introduced by this patch, but in the src_folio branch
above and in move_present_ptes() [1], doesn't unconditionally calling
pmd_mkwrite() and pte_mkwrite() on the destination entry bypass userfaultfd
write-protection and create clean-but-writable page table entries?

mm/userfaultfd.c:move_present_ptes() {
	...
		orig_dst_pte = folio_mk_pte(src_folio, dst_vma->vm_page_prot);
		/* Set soft dirty bit so userspace can notice the pte was moved */
		if (pgtable_supports_soft_dirty())
			orig_dst_pte = pte_mksoft_dirty(orig_dst_pte);
		if (pte_dirty(orig_src_pte))
			orig_dst_pte = pte_mkdirty(orig_dst_pte);
		orig_dst_pte = pte_mkwrite(orig_dst_pte, dst_vma);
	...
}

Both functions drop userfaultfd write-protection from the source entry and
make the destination entry writable, allowing userspace to bypass
write-protection tracking by moving protected pages. In addition, when
move_present_ptes() moves a clean page, calling pte_mkwrite() without
pte_mkdirty() leaves orig_dst_pte clean and writable, so later writes can go
untracked and be lost on reclaim.

[1] https://sashiko.dev/#/bug/linux-6a04b397-aeb2-44a3-b8f5-9f235e068739

-- 
Sashiko AI review · https://sashiko.dev/#/patchset/20261111-uffd-state-fixes-v1-0-00713d368976@columbia.edu?part=6


  parent reply	other threads:[~2026-11-12 17:57 UTC|newest]

Thread overview: 38+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-11-11 17:55 [PATCH 00/12] userfaultfd: assorted fixes (part 1) Tal Zussman
2026-11-11 17:55 ` [PATCH 01/12] userfaultfd: use anonymous memory for UFFDIO_ZEROPAGE on private file mappings Tal Zussman
2026-11-12 18:05   ` Lorenzo Stoakes (ARM)
2026-11-11 17:55 ` [PATCH 02/12] userfaultfd: refuse UFFDIO_MOVE into a non-present huge destination PMD Tal Zussman
2026-11-12 17:56   ` sashiko-bot
2026-11-12 18:07   ` Lorenzo Stoakes (ARM)
2026-11-11 17:55 ` [PATCH 03/12] fs/proc/task_mmu: downgrade writable migration entries in PAGEMAP_SCAN write-protect Tal Zussman
2026-11-12 18:34   ` Lorenzo Stoakes (ARM)
2026-11-11 17:55 ` [PATCH 04/12] mm/migrate: keep the uffd bit when restoring a writable migration entry Tal Zussman
2026-11-12 18:44   ` Lorenzo Stoakes (ARM)
2026-11-11 17:55 ` [PATCH 05/12] fs/proc/task_mmu: write-protect device-private THPs in PAGEMAP_SCAN Tal Zussman
2026-11-12 19:34   ` Lorenzo Stoakes (ARM)
2026-11-11 17:55 ` [PATCH 06/12] mm/huge_memory: build the moved huge zero PMD from the destination VMA Tal Zussman
2026-11-11 19:12   ` Kiryl Shutsemau
2026-11-12 17:57   ` sashiko-bot [this message]
2026-11-11 17:55 ` [PATCH 07/12] mm/mremap: resolve uffd state when the context is dropped, not during the move Tal Zussman
2026-11-11 19:20   ` Kiryl Shutsemau
2026-11-11 22:39     ` Tal Zussman
2026-11-12 11:44   ` Lorenzo Stoakes (ARM)
2026-11-12 16:00     ` Tal Zussman
2026-11-12 17:57   ` sashiko-bot
2026-11-11 17:55 ` [PATCH 08/12] mm/migrate_device: do not migrate a uffd-protected zero page Tal Zussman
2026-11-11 17:55 ` [PATCH 09/12] mm/madvise: let a guard marker carry the uffd-wp bit Tal Zussman
2026-11-12 11:21   ` Lorenzo Stoakes (ARM)
2026-11-12 16:06     ` Tal Zussman
2026-11-11 17:55 ` [PATCH 10/12] mm: set the uffd-wp bit on a guard marker when write-protecting Tal Zussman
2026-11-12 11:43   ` Lorenzo Stoakes (ARM)
2026-11-11 17:55 ` [PATCH 11/12] mm/madvise: send UFFD_EVENT_REMOVE when installing guard regions Tal Zussman
2026-11-11 19:25   ` Kiryl Shutsemau
2026-11-11 23:21     ` Tal Zussman
2026-11-12  9:40       ` Jose A. Perez de Azpillaga
2026-11-12 11:57         ` Kiryl Shutsemau
2026-11-12 11:03   ` Lorenzo Stoakes (ARM)
2026-11-12 11:06     ` Lorenzo Stoakes (ARM)
2026-11-12 15:56     ` Tal Zussman
2026-11-12 17:57   ` sashiko-bot
2026-11-11 17:55 ` [PATCH 12/12] mm/userfaultfd: check hugetlb end alignment in UFFDIO_UNREGISTER pre-scan Tal Zussman
2026-11-12 19:52   ` Lorenzo Stoakes (ARM)

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=sashiko-outbox-211648@kernel.org \
    --to=sashiko-bot@kernel.org \
    --cc=aarcange@redhat.com \
    --cc=akpm@linux-foundation.org \
    --cc=apopple@nvidia.com \
    --cc=arnd@arndb.de \
    --cc=avagin@gmail.com \
    --cc=balbirs@nvidia.com \
    --cc=baohua@kernel.org \
    --cc=baolin.wang@linux.alibaba.com \
    --cc=byungchul@sk.com \
    --cc=chris@chrisdown.name \
    --cc=david@kernel.org \
    --cc=dev.jain@arm.com \
    --cc=gourry@gourry.net \
    --cc=jannh@google.com \
    --cc=joshua.hahnjy@gmail.com \
    --cc=jthoughton@google.com \
    --cc=kas@kernel.org \
    --cc=lance.yang@linux.dev \
    --cc=liam@infradead.org \
    --cc=linux-mm@kvack.org \
    --cc=ljs@kernel.org \
    --cc=matthew.brost@intel.com \
    --cc=mhocko@suse.com \
    --cc=mike.kravetz@oracle.com \
    --cc=miko.lenczewski@arm.com \
    --cc=mirq-linux@rere.qmqm.pl \
    --cc=muchun.song@linux.dev \
    --cc=nico.pache@linux.dev \
    --cc=osalvador@suse.de \
    --cc=peterx@redhat.com \
    --cc=pfalcato@suse.de \
    --cc=rppt@kernel.org \
    --cc=ryan.roberts@arm.com \
    --cc=sashiko-reviews@lists.linux.dev \
    --cc=sfr@canb.auug.org.au \
    --cc=surenb@google.com \
    --cc=tz2294@columbia.edu \
    --cc=usama.anjum@arm.com \
    --cc=usama.arif@linux.dev \
    --cc=vbabka@kernel.org \
    --cc=ying.huang@linux.alibaba.com \
    --cc=ziy@nvidia.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.