From: sashiko-bot@kernel.org
To: "Shivank Garg" <shivankg@amd.com>
Cc: "Anna Schumaker" <anna@kernel.org>,
kvm@vger.kernel.org, damon@lists.linux.dev,
linux-cxl@vger.kernel.org, "Jeff Layton" <jlayton@kernel.org>,
dsterba@suse.cz, "Chuck Lever" <cel@kernel.org>
Subject: Re: [PATCH RFC 09/11] mm/migrate: thread migration policy through a control struct
Date: Wed, 02 Sep 2026 11:06:35 +0000 [thread overview]
Message-ID: <20260902110636.204AB1F000E9@smtp.kernel.org> (raw)
In-Reply-To: <20260902-migrate-refactor-shivank-v1-9-9dcca87669c4@amd.com>
Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
- [High] Uninitialized stack variable `async_ctl` is used when retrying split folios if the original mode was `MIGRATE_ASYNC`, which may lead to garbage memory access and unintended sleeping/blocking during async migration.
--
commit 678caf4cac0f47a63b961c745929e7b638e650c8
Author: Shivank Garg <shivankg@amd.com>
mm/migrate: thread migration policy through a control struct
This commit introduces struct migrate_control to bundle the migration mode
and reason parameters into a single structure. It passes this control struct
through internal migration helpers instead of using separate parameters.
> diff --git a/mm/migrate.c b/mm/migrate.c
> --- a/mm/migrate.c
> +++ b/mm/migrate.c
[ ... ]
> @@ -2189,27 +2188,29 @@ static int migrate_folios_batch(struct list_head *from,
> */
> static int __migrate_lru_folios(struct list_head *from, new_folio_t get_new_folio,
> free_folio_t put_new_folio, unsigned long private,
> - enum migrate_mode mode, enum migrate_reason reason,
> - struct list_head *ret_folios,
> + const struct migrate_control *ctl, struct list_head *ret_folios,
> struct migrate_pages_stats *stats)
> {
> int rc, nr_failed = 0;
> LIST_HEAD(folios);
> LIST_HEAD(split_folios);
> struct migrate_pages_stats astats;
> + struct migrate_control async_ctl;
>
> - if (mode == MIGRATE_ASYNC) {
> + if (ctl->mode == MIGRATE_ASYNC) {
> rc = migrate_folios_batch(from, get_new_folio, put_new_folio,
> - private, mode, reason, ret_folios,
> + private, ctl, ret_folios,
> &split_folios, stats,
> NR_MAX_MIGRATE_PAGES_RETRY);
> goto out;
> }
>
> + async_ctl = *ctl;
> + async_ctl.mode = MIGRATE_ASYNC;
[ ... ]
> out:
> if (rc < 0) {
> list_splice_tail(&split_folios, ret_folios);
> } else if (!list_empty(&split_folios)) {
> /*
> * Folios split along the way get one asynchronous attempt at
> * their new order. Their failure is not counted: the large
> * folio they came from was already counted as one failure.
> */
> migrate_folios_batch(&split_folios, get_new_folio, put_new_folio,
> - private, MIGRATE_ASYNC, reason, ret_folios,
> + private, &async_ctl, ret_folios,
> NULL, stats, 1);
[Severity: High]
Can this lead to an uninitialized stack variable being used?
If __migrate_lru_folios() is called with ctl->mode == MIGRATE_ASYNC, the
early check jumps directly to the out label, bypassing the initialization
of async_ctl. If large folios were split during that first pass, the
!list_empty(&split_folios) check will be true.
Could this cause migrate_folios_batch() to execute with garbage policy? For
example, it might interpret the uninitialized async_ctl.mode as MIGRATE_SYNC,
causing unintended blocking and sleeping during what should be an asynchronous
migration.
> list_splice_tail_init(&split_folios, ret_folios);
> }
>
> return rc;
> }
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260902-migrate-refactor-shivank-v1-0-9dcca87669c4@amd.com?part=9
next prev parent reply other threads:[~2026-09-02 11:06 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 [this message]
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
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=20260902110636.204AB1F000E9@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