From: sashiko-bot@kernel.org
To: "Shivank Garg" <shivankg@amd.com>
Cc: dsterba@suse.cz, "Jeff Layton" <jlayton@kernel.org>,
linux-cxl@vger.kernel.org, "Anna Schumaker" <anna@kernel.org>,
damon@lists.linux.dev, kvm@vger.kernel.org,
"Chuck Lever" <cel@kernel.org>
Subject: Re: [PATCH RFC 10/11] mm/migrate: pass migrate_control to migrate_pages()
Date: Wed, 02 Sep 2026 11:11:33 +0000 [thread overview]
Message-ID: <20260902111133.9C4EC1F00ACF@smtp.kernel.org> (raw)
In-Reply-To: <20260902-migrate-refactor-shivank-v1-10-9dcca87669c4@amd.com>
Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
- [High] Uninitialized `async_ctl` structure is passed to `migrate_folios_batch()` when `ctl->mode == MIGRATE_ASYNC`.
--
commit c0d77495768f5e8f1e4f178497970348e9942beb
Author: Shivank Garg <shivankg@amd.com>
mm/migrate: pass migrate_control to migrate_pages()
migrate_pages() still takes mode and reason separately and reconstructs a
migrate_control internally. This prevents callers from supplying additional
migration policy without extending its argument list.
> diff --git a/mm/migrate.c b/mm/migrate.c
> index e4bc7122076e1..549f8b57092cc 100644
> --- a/mm/migrate.c
> +++ b/mm/migrate.c
> @@ -2359,7 +2354,7 @@ int migrate_pages(struct list_head *from, new_folio_t get_new_folio,
> rc_gather += rc;
>
> rc = migrate_lru_folios(from, get_new_folio, put_new_folio,
> - private, &ctl, &ret_folios, &stats);
> + private, ctl, &ret_folios, &stats);
> if (rc < 0) {
> rc_gather = rc;
> goto out;
[Severity: High]
Does this execution path introduce a regression where an uninitialized
structure is passed when the initial mode is MIGRATE_ASYNC?
Looking at __migrate_lru_folios() which is called via migrate_lru_folios():
mm/migrate.c:__migrate_lru_folios() {
struct migrate_control async_ctl;
if (ctl->mode == MIGRATE_ASYNC) {
rc = migrate_folios_batch(...);
goto out;
}
async_ctl = *ctl;
async_ctl.mode = MIGRATE_ASYNC;
...
out:
...
} else if (!list_empty(&split_folios)) {
migrate_folios_batch(&split_folios, get_new_folio, put_new_folio,
private, &async_ctl, ret_folios,
NULL, stats, 1);
}
}
If a caller invokes migrate_pages() with MIGRATE_ASYNC (such as DAMON or
NUMA balancing), the execution jumps to the out label, skipping the
initialization of the async_ctl structure.
If a large folio fails to migrate and is successfully split, the split folios
are placed into the split_folios list. Then migrate_folios_batch() is called
to retry the split folios, passing the uninitialized async_ctl structure.
Could this regression lead to unpredictable migration behavior by using
garbage data from the stack for the mode and reason fields, potentially
sleeping in paths that expect asynchronous behavior?
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260902-migrate-refactor-shivank-v1-0-9dcca87669c4@amd.com?part=10
next prev parent reply other threads:[~2026-09-02 11:11 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-09-02 10:52 [PATCH RFC 00/11] mm/migrate: separate migration paths and carry migration policy Shivank Garg
2026-09-02 10:52 ` [PATCH RFC 01/11] mm/migrate: extract folio unmap phase Shivank Garg
2026-09-02 11:02 ` sashiko-bot
2026-09-02 10:52 ` [PATCH RFC 02/11] mm/migrate: handle retries in migrate_folios_move() Shivank Garg
2026-09-02 11:01 ` sashiko-bot
2026-09-02 10:52 ` [PATCH RFC 03/11] mm/migrate: factor out folio splitting on allocation failure Shivank Garg
2026-09-02 11:06 ` sashiko-bot
2026-09-02 10:52 ` [PATCH RFC 04/11] mm/migrate: use a dedicated list for hugetlb folios Shivank Garg
2026-09-02 11:02 ` sashiko-bot
2026-09-02 10:52 ` [PATCH RFC 05/11] mm/migrate: add a dedicated movable_ops migration pass Shivank Garg
2026-09-02 11:04 ` sashiko-bot
2026-09-02 10:52 ` [PATCH RFC 06/11] mm/migrate: rename migrate_pages_batch() to migrate_folios_batch() Shivank Garg
2026-09-02 11:02 ` sashiko-bot
2026-09-02 10:52 ` [PATCH RFC 07/11] mm/migrate: add migrate_lru_folios() entry point Shivank Garg
2026-09-02 11:03 ` sashiko-bot
2026-09-02 10:52 ` [PATCH RFC 08/11] mm/migrate: move LRU batching into migrate_lru_folios() Shivank Garg
2026-09-02 11:00 ` sashiko-bot
2026-09-02 10:52 ` [PATCH RFC 09/11] mm/migrate: thread migration policy through a control struct Shivank Garg
2026-09-02 11:06 ` sashiko-bot
2026-09-02 11:19 ` [sos-linux-ext-patches] " Garg, Shivank
2026-09-02 10:52 ` [PATCH RFC 10/11] mm/migrate: pass migrate_control to migrate_pages() Shivank Garg
2026-09-02 11:11 ` sashiko-bot [this message]
2026-09-02 10:52 ` [PATCH RFC 11/11] mm/migrate: pass migrate_control to migrate_folio() Shivank Garg
2026-09-02 11:10 ` Jan Kara
2026-09-02 11:10 ` 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=20260902111133.9C4EC1F00ACF@smtp.kernel.org \
--to=sashiko-bot@kernel.org \
--cc=anna@kernel.org \
--cc=cel@kernel.org \
--cc=damon@lists.linux.dev \
--cc=dsterba@suse.cz \
--cc=jlayton@kernel.org \
--cc=kvm@vger.kernel.org \
--cc=linux-cxl@vger.kernel.org \
--cc=sashiko-reviews@lists.linux.dev \
--cc=shivankg@amd.com \
/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