From: Mike Rapoport <rppt@kernel.org>
To: Chris Down <chris@chrisdown.name>
Cc: pasha.tatashin@soleen.com, pratyush@kernel.org, graf@amazon.com,
kexec@lists.infradead.org, linux-mm@kvack.org,
linux-kernel@vger.kernel.org, kernel-team@meta.com
Subject: Re: [PATCH] kho: Prevent reuse of preserved pages after a reservation failure
Date: Wed, 11 Nov 2026 10:01:23 +0200 [thread overview]
Message-ID: <avQg0_jFY3get3wG@kernel.org> (raw)
In-Reply-To: <avQUquBK6cO6tUUI@chrisdown.name>
Hi,
On Tue, Nov 10, 2026 at 11:09:30PM -0800, Chris Down wrote:
> kho_preserved_memory_reserve() reserves each range of preserved memory
> in memblock and marks it noinit, but ignores both return values. Either
> can fail when memblock has to grow its reserved array and can't find
> room, which at this point in boot it may only take from KHO bootmem.
Is it an LLM analysis or you seen this happen?
> The boot then goes on as if the range were reserved, and two things
> can follow:
> - If the reservation failed, memblock_free_all() hands the range to the
> page allocator with the previous kernel's data still in it, while its
> KHO user still expects to restore it. A memfd preserved through LUO
> can then get back pages that belong to someone else. Oh dear!
> - If only the noinit marking failed, the struct pages can be
> initialised later, wiping the KHO magic, so restoring the range fails.
>
> Dropping the handover at this point isn't safe either. reserve_mem=
> revives its regions from the handover before mm_core_init(), and
> relies on this walk to reserve them.
reserve_mem_kho_revive() can memblock_reserve() its memory itself and we
can carry on, can't we?
> Carrying on could hand out private data, so let's panic if either call
> fails.
>
> Fixes: fc33e4b44b27 ("kexec: enable KHO support for memory preservation")
> Signed-off-by: Chris Down <chris@chrisdown.name>
> ---
> kernel/liveupdate/kexec_handover.c | 11 ++++++++---
> 1 file changed, 8 insertions(+), 3 deletions(-)
>
> diff --git a/kernel/liveupdate/kexec_handover.c b/kernel/liveupdate/kexec_handover.c
> index eeec298aa9d6..0faa21ebb0cf 100644
> --- a/kernel/liveupdate/kexec_handover.c
> +++ b/kernel/liveupdate/kexec_handover.c
> @@ -629,9 +629,14 @@ static int __init kho_preserved_memory_reserve(unsigned long key, void *data)
> sz = 1UL << (order + PAGE_SHIFT);
> page = kho_get_preserved_page(phys, order);
>
> - /* Reserve the memory preserved in KHO in memblock */
> - memblock_reserve(phys, sz);
> - memblock_reserved_mark_noinit(phys, sz);
> + /*
> + * Reserve the memory preserved in KHO in memblock. It's too late to
> + * drop the handover if that fails: reserve_mem may already have revived
> + * regions from it.
> + */
> + if (memblock_reserve(phys, sz) || memblock_reserved_mark_noinit(phys, sz))
> + panic("KHO: failed to reserve preserved memory %pa+%#llx\n",
> + &phys, sz);
> info.magic = KHO_PAGE_MAGIC;
> info.order = order;
> page->private = info.page_private;
>
> base-commit: a0dc8eddbfdb6dd9c5c2b70eb66ab49cb1978425
> --
> 2.54.0
>
--
Sincerely yours,
Mike.
next prev parent reply other threads:[~2026-11-11 8:01 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-11-11 7:09 [PATCH] kho: Prevent reuse of preserved pages after a reservation failure Chris Down
2026-11-11 8:01 ` Mike Rapoport [this message]
2026-11-11 8:16 ` Chris Down
2026-11-11 9:18 ` Mike Rapoport
2026-11-11 21:28 ` Pasha Tatashin
2026-11-11 21:36 ` Pasha Tatashin
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=avQg0_jFY3get3wG@kernel.org \
--to=rppt@kernel.org \
--cc=chris@chrisdown.name \
--cc=graf@amazon.com \
--cc=kernel-team@meta.com \
--cc=kexec@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=pasha.tatashin@soleen.com \
--cc=pratyush@kernel.org \
/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.