All of lore.kernel.org
 help / color / mirror / Atom feed
From: Andrew Morton <akpm@linux-foundation.org>
To: Gregory Price <gourry@gourry.net>
Cc: linux-mm@kvack.org, linux-fsdevel@vger.kernel.org,
	linux-kernel@vger.kernel.org, kernel-team@meta.com,
	liam@infradead.org, ljs@kernel.org, vbabka@kernel.org,
	jannh@google.com, pfalcato@suse.de, peterx@redhat.com,
	jgg@ziepe.ca, david@kernel.org,
	sashiko-bot <sashiko-bot@kernel.org>,
	stable@vger.kernel.org
Subject: Re: [PATCH] proc/task_mmu: handle special PMDs in clear_refs and pagemap
Date: Mon, 14 Sep 2026 21:49:10 -0700	[thread overview]
Message-ID: <20260914214910.a22cfcdc250bfbb6b14edaf8@linux-foundation.org> (raw)
In-Reply-To: <20260912122822.3348978-1-gourry@gourry.net>

On Sat, 12 Sep 2026 08:28:22 -0400 Gregory Price <gourry@gourry.net> wrote:

> mshv_vtl_low can install a special PMD from a PFN supplied in the mmap file
> offset.  That PFN need not have a memmap entry.  Reading /proc/PID/pagemap
> or writing /proc/PID/clear_refs for such a mapping oopses the kernel.
> 
> With a test driver mapping the PFN at the 1 TiB mark:
> 
>   echo 1 > /proc/self/clear_refs
> 
>   BUG: unable to handle page fault for address: fffffb5b80000008
>   #PF: supervisor read access in kernel mode
>   #PF: error_code(0x0000) - not-present page
>   RIP: 0010:clear_refs_pte_range+0xb1/0x1e0
>   Call Trace:
>    walk_pgd_range+0x50a/0xad0
>    __walk_page_range+0x6a/0x1d0
>    walk_page_range_mm_unsafe+0x193/0x230
>    clear_refs_write+0x18e/0x3f0
> 
>   pread(pagemap_fd, buf, 512 * 8, addr / PAGE_SIZE * 8)
> 
>   BUG: unable to handle page fault for address: fffff57840000008
>   RIP: 0010:pagemap_pmd_range+0x3cf/0x6b0
>   Call Trace:
>    walk_pgd_range+0x50a/0xad0
>    __walk_page_range+0x6a/0x1d0
>    walk_page_range_mm_unsafe+0x193/0x230
>    pagemap_read+0x1dc/0x350
> 
> clear_refs_pte_range() passes the PMD to pmd_folio(), while
> pagemap_pmd_range_thp() uses pmd_page() followed by page_folio().
> 
> Both paths assume the PFN has a struct page and dereference bad address.
> 
> Use vm_normal_folio_pmd() and vm_normal_page_pmd() so clear_refs skips
> folio operations and pagemap skips folio-derived flags for special PMDs.
> This matches the PTE paths, which already use vm_normal_folio() and
> vm_normal_page().
> 
> Fixes: 3c8e44c9b369 ("mm: mark special bits for huge pfn mappings when inject")
> Cc: <stable@vger.kernel.org> # v6.19+

Why cc:stable?  Is a crafted test driver the only way of hitting this?


> --- a/fs/proc/task_mmu.c
> +++ b/fs/proc/task_mmu.c
> @@ -1671,7 +1671,9 @@ static int clear_refs_pte_range(pmd_t *pmd, unsigned long addr,
>  		if (!pmd_present(*pmd))
>  			goto out;
>  
> -		folio = pmd_folio(*pmd);
> +		folio = vm_normal_folio_pmd(vma, addr, *pmd);
> +		if (!folio)
> +			goto out;
>  
>  		/* Clear accessed and referenced bits. */
>  		pmdp_test_and_clear_young(vma, addr, pmd);
> @@ -1991,7 +1993,7 @@ static int pagemap_pmd_range_thp(pmd_t *pmdp, unsigned long addr,
>  		goto populate_pagemap;
>  
>  	if (pmd_present(pmd)) {
> -		page = pmd_page(pmd);
> +		page = vm_normal_page_pmd(vma, addr, pmd);
>  
>  		flags |= PM_PRESENT;
>  		if (pmd_soft_dirty(pmd))



  reply	other threads:[~2026-09-15  4:49 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-09-12 12:28 [PATCH] proc/task_mmu: handle special PMDs in clear_refs and pagemap Gregory Price
2026-09-15  4:49 ` Andrew Morton [this message]
2026-09-15  5:19   ` Gregory Price
2026-09-15  6:11     ` Andrew Morton
2026-09-25 11:28 ` David Hildenbrand (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=20260914214910.a22cfcdc250bfbb6b14edaf8@linux-foundation.org \
    --to=akpm@linux-foundation.org \
    --cc=david@kernel.org \
    --cc=gourry@gourry.net \
    --cc=jannh@google.com \
    --cc=jgg@ziepe.ca \
    --cc=kernel-team@meta.com \
    --cc=liam@infradead.org \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=ljs@kernel.org \
    --cc=peterx@redhat.com \
    --cc=pfalcato@suse.de \
    --cc=sashiko-bot@kernel.org \
    --cc=stable@vger.kernel.org \
    --cc=vbabka@kernel.org \
    /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.