From: sashiko-bot@kernel.org
To: mpenttil@redhat.com
Cc: dri-devel@lists.freedesktop.org, intel-xe@lists.freedesktop.org
Subject: Re: [PATCH v14 07/12] mm/hmm: migrate collection in HMM pagewalk - pmd level
Date: Tue, 22 Sep 2026 05:50:22 +0000 [thread overview]
Message-ID: <20260922055022.C1EEB1F000FF@smtp.kernel.org> (raw)
In-Reply-To: <20260922053421.4092027-8-mpenttil@redhat.com>
Thank you for your contribution! Sashiko AI review found 3 potential issue(s) to consider:
- [Critical] mm: set_pmd_migration_entry() uses wrong subpage for >2MB folios
- [High] mm: pmd_folio() dereferences bogus pointer for non-present PMD leaf entries
- [High] mm: unreachable device-private PMD branch causes infinite fault loops
--
commit 191891c0dfbd0707d81f83e9fa9b79a00e1693ac
Author: Mika Penttilä <mpenttil@redhat.com>
mm/hmm: migrate collection in HMM pagewalk - pmd level
Implement hmm_vma_handle_migrate_prepare_pmd() for HMM pagewalk migration.
It makes migration decisions, possibly splits folios, and inserts migration
pmds.
> diff --git a/mm/hmm.c b/mm/hmm.c
> index b3b79d13c7978..a1459bd34c04e 100644
> --- a/mm/hmm.c
> +++ b/mm/hmm.c
> @@ -552,8 +552,100 @@ static int hmm_vma_handle_migrate_prepare_pmd(const struct mm_walk *walk,
[ ... ]
> + if (pmd_trans_huge(*pmdp)) {
> + if (!(minfo & MIGRATE_VMA_SELECT_SYSTEM))
> + goto out;
> +
> + folio = pmd_folio(*pmdp);
[Severity: High]
Does this code handle non-present PMD leaf entries correctly?
When pmd_trans_huge() is called, it can return true for non-present PMD leaf
entries like migration or device-private swap entries because they have the
huge bit set. If that happens, this path will unconditionally call
pmd_folio(), which can produce a bogus struct page pointer because swap
metadata is interpreted as a PFN. Could this lead to an invalid memory access
if userspace triggers HMM migration on memory regions with these entries?
> + if (is_huge_zero_folio(folio))
> + return hmm_pfns_fill(start, end, hmm_vma_walk, 0);
> +
> + } else if (!pmd_present(*pmdp)) {
[Severity: High]
Is this branch actually reachable for device-private PMDs?
According to the MM subsystem guide, pmd_present() returns true for
non-present PMD leaf entries, which includes device-private entries. That
would make !pmd_present(*pmdp) evaluate to false. If device-private PMDs
bypass the huge PMD check and fail this condition, they will fall through to
the final else block and return -EBUSY. Returning -EBUSY causes the outer
walk_page_range() loop in hmm_range_fault_locked() to retry the same address
indefinitely. Can this cause a denial of service via an infinite loop?
> + const softleaf_t entry = softleaf_from_pmd(*pmdp);
[ ... ]
> + if (thp_migration_supported() &&
> + (migrate->flags & MIGRATE_VMA_SELECT_COMPOUND) &&
> + (IS_ALIGNED(start, HPAGE_PMD_SIZE) &&
> + IS_ALIGNED(end, HPAGE_PMD_SIZE))) {
> + struct page_vma_mapped_walk pvmw = {
> + .ptl = hmm_vma_walk->ptl,
> + .address = start,
> + .pmd = pmdp,
> + .vma = walk->vma,
> + };
> +
> + hmm_pfn[0] |= HMM_PFN_MIGRATE | HMM_PFN_COMPOUND;
> +
> + r = set_pmd_migration_entry(&pvmw, folio_page(folio, 0));
[Severity: Critical]
Will this use the correct subpage for folios larger than 2MB?
For file-backed folios that are larger than PMD size (e.g., 1GB), they can
be mapped by multiple PMDs. Using folio_page(folio, 0) always evaluates to
the head page of the large folio, regardless of which 2MB chunk the PMD
actually maps. Since set_pmd_migration_entry() uses page_to_pfn() on the
provided page, all PMD migration entries for the large folio might encode
the PFN of the head chunk. Upon migration restoration, could this silently
corrupt data by mapping all PMDs to the first 2MB chunk's physical memory?
Would it be safer to use pmd_page(*pmdp) here to get the specific subpage?
> + if (r) {
> + hmm_pfn[0] &= ~(HMM_PFN_MIGRATE | HMM_PFN_COMPOUND);
> + r = -ENOENT; // fallback
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260922053421.4092027-1-mpenttil@redhat.com?part=7
next prev parent reply other threads:[~2026-09-22 5:50 UTC|newest]
Thread overview: 35+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-09-22 5:34 [PATCH 00/12] [PATCH v14 00/12] migrate on fault for device pages mpenttil
2026-09-22 5:34 ` [PATCH v14 01/12] mm/Kconfig: changes for " mpenttil
2026-09-22 5:44 ` sashiko-bot
2026-09-22 22:27 ` Balbir Singh
2026-09-23 5:42 ` Mika Penttilä
2026-09-22 5:34 ` [PATCH v14 02/12] mm: add helper to convert HMM pfn to migrate pfn mpenttil
2026-09-22 5:34 ` [PATCH v14 03/12] mm/hmm: preparations for HMM to participate in migration mpenttil
2026-09-22 5:49 ` sashiko-bot
2026-09-22 5:34 ` [PATCH v14 04/12] mm/hmm: do the plumbing " mpenttil
2026-09-22 5:50 ` sashiko-bot
2026-09-22 5:34 ` [PATCH v14 05/12] mm/hmm: implement folio split for migrate needs in HMM pagewalk mpenttil
2026-09-22 5:47 ` sashiko-bot
2026-09-22 5:34 ` [PATCH v14 06/12] mm/hmm: migrate collection in HMM pagewalk - pte level mpenttil
2026-09-22 5:47 ` sashiko-bot
2026-09-22 5:34 ` [PATCH v14 07/12] mm/hmm: migrate collection in HMM pagewalk - pmd level mpenttil
2026-09-22 5:50 ` sashiko-bot [this message]
2026-09-22 5:34 ` [PATCH v14 08/12] mm/hmm: add lazy MMU mode support for migration in HMM pagewalk mpenttil
2026-09-22 5:51 ` sashiko-bot
2026-09-22 5:34 ` [PATCH v14 09/12] mm/hmm: implement rollback for device page " mpenttil
2026-09-22 5:34 ` [PATCH v14 10/12] mm: enable device page migration from " mpenttil
2026-09-22 5:58 ` sashiko-bot
2026-09-22 5:34 ` [PATCH v14 11/12] lib/test_hmm: add a new testcase for the migrate on fault mpenttil
2026-09-22 6:09 ` sashiko-bot
2026-09-22 5:34 ` [PATCH v14 12/12] Documentation/mm/hmm: document migration through hmm_range_fault() mpenttil
2026-09-22 5:41 ` ✗ CI.checkpatch: warning for Migrate on fault for device pages (rev6) Patchwork
2026-09-22 5:43 ` ✓ CI.KUnit: success " Patchwork
2026-09-22 6:00 ` ✗ CI.checksparse: warning " Patchwork
2026-09-22 7:08 ` ✓ Xe.CI.BAT: success " Patchwork
2026-09-22 15:03 ` ✗ Xe.CI.FULL: failure " Patchwork
2026-09-23 2:27 ` [PATCH 00/12] [PATCH v14 00/12] migrate on fault for device pages Andrew Morton
2026-09-23 5:29 ` Mika Penttilä
2026-09-23 21:19 ` Andrew Morton
2026-09-23 23:24 ` Jason Gunthorpe
2026-09-24 0:14 ` Mika Penttilä
2026-09-24 0:10 ` Mika Penttilä
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=20260922055022.C1EEB1F000FF@smtp.kernel.org \
--to=sashiko-bot@kernel.org \
--cc=dri-devel@lists.freedesktop.org \
--cc=intel-xe@lists.freedesktop.org \
--cc=mpenttil@redhat.com \
--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