All of lore.kernel.org
 help / color / mirror / Atom feed
From: sashiko-bot@kernel.org
To: mpenttil@redhat.com
Cc: dri-devel@lists.freedesktop.org, intel-xe@lists.freedesktop.org
Subject: Re: [PATCH v15 06/11] mm/hmm: migrate collection in HMM pagewalk - pmd level
Date: Thu, 24 Sep 2026 07:09:59 +0000	[thread overview]
Message-ID: <20260924070959.BAFF41F000FF@smtp.kernel.org> (raw)
In-Reply-To: <20260924065313.899730-7-mpenttil@redhat.com>

Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
- [High] mm: Use-After-Free in __migrate_vma_split_folio on unlocked tail page
--

commit 303a19fde6deb0a6633524827ecf0a51aa867674
Author: Mika Penttilä <mpenttil@redhat.com>

mm/hmm: migrate collection in HMM pagewalk - pmd level

This commit implements hmm_vma_handle_migrate_prepare_pmd() to handle
migration decisions and split folios for HMM pagewalk-based migration.
It also refactors the folio splitting path by separating it into
__migrate_vma_split_folio() to fix extra refcount and unlock issues.

> diff --git a/mm/hmm.c b/mm/hmm.c
> index a60b669630496..ea77429c5178b 100644
> --- a/mm/hmm.c
> +++ b/mm/hmm.c
> @@ -492,31 +492,19 @@ static int hmm_vma_handle_absent_pmd(struct mm_walk *walk, unsigned long start,
>  
>  #ifdef CONFIG_DEVICE_MIGRATION
>  /**
> - * migrate_vma_split_folio() - Helper function to split a THP folio
> + * __migrate_vma_split_folio() - split a folio and move the lock/ref to the
> + * order-0 folio backing @fault_page after the split
>   * @folio: the folio to split
> - * @fault_page: struct page associated with the fault if any
> - * @hmm_vma_walk: walk in progress
> - * @ptep: pte_t * for unmap and unlock ptl
>   *
> - * Returns 0 on success
> + * Returns 0 on success.
>   */
> -static int migrate_vma_split_folio(struct folio *folio,
> -				   struct page *fault_page,
> -				   struct hmm_vma_walk *hmm_vma_walk,
> -				   pte_t *ptep)
> +static int __migrate_vma_split_folio(struct folio *folio,
> +				     struct page *fault_page)
>  {
> -	int ret;
>  	struct folio *fault_folio = fault_page ? page_folio(fault_page) : NULL;
>  	struct folio *new_fault_folio = NULL;
> -
> -	if (folio != fault_folio)
> -		folio_get(folio);
> -
> -	pte_unmap_unlock(ptep, hmm_vma_walk->ptl);
> -	hmm_vma_walk->ptelocked = false;
> -
> -	if (folio != fault_folio)
> -		folio_lock(folio);
> +	int ret;
>  
>  	ret = split_folio(folio);
>  	if (ret) {

[Severity: High]
Can this lead to a use-after-free on an unlocked tail page?

If split_folio() successfully splits a THP where the fault page is a tail
page, it returns with the head page locked but unfreezes and unlocks all
the tail pages.

Later in this function, the code directly acquires a reference and lock
on the new tail folio:

	if (new_fault_folio != fault_folio) {
		folio_get(new_fault_folio);
		folio_lock(new_fault_folio);
	}

Since the PMD lock was dropped before calling __migrate_vma_split_folio()
and mmap_lock is only held in read mode, could a concurrent thread (like
memory reclaim) isolate, unmap, and free the unlocked tail page to the buddy
allocator before folio_get() is called?

Should this use folio_try_get() to safely acquire a reference to the
speculatively accessed tail folio?

-- 
Sashiko AI review · https://sashiko.dev/#/patchset/20260924065313.899730-1-mpenttil@redhat.com?part=6

  reply	other threads:[~2026-09-24  7:10 UTC|newest]

Thread overview: 27+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-09-24  6:53 [PATCH v15 00/11] migrate on fault for device pages mpenttil
2026-09-24  6:53 ` [PATCH v15 01/11] mm/Kconfig: changes for " mpenttil
2026-09-24  7:11   ` sashiko-bot
2026-09-24  6:53 ` [PATCH v15 02/11] mm: add helper to convert HMM pfn to migrate pfn mpenttil
2026-09-24  6:53 ` [PATCH v15 03/11] mm/hmm: preparations for HMM to participate in migration mpenttil
2026-09-24  7:09   ` sashiko-bot
2026-09-24  6:53 ` [PATCH v15 04/11] mm/hmm: do the plumbing " mpenttil
2026-09-24  6:53 ` [PATCH v15 05/11] mm/hmm: migrate collection in HMM pagewalk - pte level mpenttil
2026-09-24  7:10   ` sashiko-bot
2026-09-24  6:53 ` [PATCH v15 06/11] mm/hmm: migrate collection in HMM pagewalk - pmd level mpenttil
2026-09-24  7:09   ` sashiko-bot [this message]
2026-09-24  6:53 ` [PATCH v15 07/11] mm/hmm: add lazy MMU mode support for migration in HMM pagewalk mpenttil
2026-09-24  6:53 ` [PATCH v15 08/11] mm/hmm: implement rollback for device page " mpenttil
2026-09-24  7:16   ` sashiko-bot
2026-09-24  6:53 ` [PATCH v15 09/11] mm: enable device page migration from " mpenttil
2026-09-24  6:53 ` [PATCH v15 10/11] lib/test_hmm: add a new testcase for the migrate on fault mpenttil
2026-09-24  7:27   ` sashiko-bot
2026-09-24  6:53 ` [PATCH v15 11/11] Documentation/mm/hmm: document migration through hmm_range_fault() mpenttil
2026-09-24  7:28 ` ✗ CI.checkpatch: warning for Migrate on fault for device pages (rev7) Patchwork
2026-09-24  7:30 ` ✓ CI.KUnit: success " Patchwork
2026-09-24  7:46 ` ✗ CI.checksparse: warning " Patchwork
2026-09-24  8:09 ` ✓ Xe.CI.BAT: success " Patchwork
2026-09-24 21:10 ` ✗ Xe.CI.FULL: failure " Patchwork
2026-09-25  9:07 ` [PATCH v15 00/11] migrate on fault for device pages Christoph Hellwig
2026-09-25 10:23   ` Mika Penttilä
2026-09-25 12:47     ` Jason Gunthorpe
2026-09-25 13:22       ` 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=20260924070959.BAFF41F000FF@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 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.