From: sashiko-bot@kernel.org
To: "Gregory Price" <gourry@gourry.net>
Cc: damon@lists.linux.dev
Subject: Re: [PATCH 3/4] mm/madvise: skip zone device folios in cold/pageout PMD range
Date: Tue, 28 Jul 2026 19:58:53 +0000 [thread overview]
Message-ID: <20260728195853.798821F00A3A@smtp.kernel.org> (raw)
In-Reply-To: <20260728194714.3713735-4-gourry@gourry.net>
Thank you for your contribution! Sashiko AI review found 2 potential issue(s) to consider:
Pre-existing issues:
- [Critical] Direct assignment to *ptep bypasses set_pte_at(), causing hypervisor faults on paravirtualized architectures.
- [Critical] madvise_cold_or_pageout_pte_range() blindly calls pmd_folio() on PMD entries without checking if the VMA allows raw PFN mappings, leading to invalid folio pointer dereferences.
--
--- Patch [3]: [PATCH 3/4] mm/madvise: skip zone device folios in cold/pageout PMD range ---
commit f53274ca71e03d22eaac643cdc7488b95adca203
Author: Gregory Price <gourry@gourry.net>
mm/madvise: skip zone device folios in cold/pageout PMD range
This patch modifies madvise_cold_or_pageout_pte_range() to explicitly
filter out ZONE_DEVICE folios. It uses folio_is_zone_device() to prevent
aging or paging out device memory that might bypass existing VMA and PMD
checks.
> diff --git a/mm/madvise.c b/mm/madvise.c
> index 07a21ca31bad4..ffd6a68320a86 100644
> --- a/mm/madvise.c
> +++ b/mm/madvise.c
> @@ -395,6 +395,9 @@ static int madvise_cold_or_pageout_pte_range(pmd_t *pmd,
>
> folio = pmd_folio(orig_pmd);
>
[Severity: Critical]
This is a pre-existing issue, but does this code dereference an invalid
folio pointer?
The madvise_cold_or_pageout_pte_range() function handles MADV_COLD and
MADV_PAGEOUT hints, and the can_madv_lru_vma() filter rejects VM_PFNMAP but
allows VM_MIXEDMAP VMAs.
Device drivers can map raw PFNs (not backed by a struct page) as huge PMDs
into VM_MIXEDMAP VMAs using vmf_insert_pfn_pmd().
When encountering such a PMD, pmd_trans_huge() is true, but pmd_folio()
translates the raw PFN into a garbage struct folio pointer.
Could this cause a kernel panic due to an out-of-bounds read when
folio_is_zone_device() dereferences folio->flags on the invalid pointer?
> + if (folio_is_zone_device(folio))
> + goto huge_unlock;
> +
> /* Do not interfere with other mappings of this folio */
> if (folio_maybe_mapped_shared(folio))
> goto huge_unlock;
[ ... ]
While reviewing mm/madvise.c, I also noticed another pre-existing regression
in guard_install_set_pte():
> static int guard_install_set_pte(unsigned long addr, unsigned long next,
> pte_t *ptep, struct mm_walk *walk)
> {
> unsigned long *nr_pages = (unsigned long *)walk->private;
>
> /* Simply install a PTE marker, this causes segfault on access. */
> *ptep = make_pte_marker(PTE_MARKER_GUARD);
[Severity: Critical]
This is a pre-existing issue, but does this direct assignment bypass
architecture-specific hooks?
By assigning directly to *ptep instead of using set_pte_at(), this skips
hooks required by paravirtualized architectures.
On architectures like Xen PV where guest page tables are mapped read-only by
the hypervisor, will this direct write trigger a hypervisor fault and crash
the kernel if an unprivileged user calls madvise(..., MADV_GUARD_INSTALL) on
a valid anonymous VMA?
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260728194714.3713735-1-gourry@gourry.net?part=3
next prev parent reply other threads:[~2026-07-28 19:58 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-07-28 19:47 [PATCH 0/4] mm: reject zone device folios in more folio walkers Gregory Price
2026-07-28 19:47 ` [PATCH 1/4] mm/damon: defensively skip zone device folios in damon_get_folio() Gregory Price
2026-07-28 19:57 ` sashiko-bot
2026-07-28 20:16 ` Gregory Price
2026-07-29 0:55 ` SJ Park
2026-07-29 0:50 ` SJ Park
2026-07-29 2:01 ` Gregory Price
2026-07-29 14:22 ` SJ Park
2026-07-29 15:14 ` Gregory Price
2026-07-28 19:47 ` [PATCH 2/4] mm/huge_memory: skip zone device folios in madvise_free_huge_pmd() Gregory Price
2026-07-28 20:01 ` sashiko-bot
2026-07-28 19:47 ` [PATCH 3/4] mm/madvise: skip zone device folios in cold/pageout PMD range Gregory Price
2026-07-28 19:58 ` sashiko-bot [this message]
2026-07-28 19:47 ` [PATCH 4/4] mm/mempolicy: skip zone device folios when queueing folios Gregory Price
2026-07-28 19:59 ` sashiko-bot
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=20260728195853.798821F00A3A@smtp.kernel.org \
--to=sashiko-bot@kernel.org \
--cc=damon@lists.linux.dev \
--cc=gourry@gourry.net \
--cc=sashiko-reviews@lists.linux.dev \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox