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))
next prev parent 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.