From: Baoquan He <bhe@redhat.com>
To: Borislav Petkov <bp@alien8.de>
Cc: Tom Lendacky <thomas.lendacky@amd.com>,
linux-kernel@vger.kernel.org, dyoung@redhat.com,
daniel.kiper@oracle.com, noodles@fb.com, lijiang@redhat.com,
kexec@lists.infradead.org, x86@kernel.org
Subject: Re: [PATCH v3 1/2] x86/mm: rename the confusing local variable in early_memremap_is_setup_data()
Date: Wed, 13 Nov 2024 20:55:47 +0800 [thread overview]
Message-ID: <ZzSh0/i0HXDnfUof@MiWiFi-R3L-srv> (raw)
In-Reply-To: <20241106112052.GCZytRFKTESZI8_3qD@fat_crate.local>
On 11/06/24 at 12:20pm, Borislav Petkov wrote:
> On Sat, Nov 02, 2024 at 12:06:18PM +0100, Borislav Petkov wrote:
> > Ok, I'll take your 2/2 next week and you can then send the cleanup ontop.
>
> OMG what a mess this is. Please test the below before I apply it.
I finally got an available machine to test below patch, I can confirm
that without it the breakage can be reproduced stably; with below patch
applied the breakage is gone and vmcore dumping is successful.
>
> Then, when you do the cleanup, do the following:
Will post cleanup patch later. Thanks.
>
> - merge early_memremap_is_setup_data() with memremap_is_setup_data() into
> a common __memremap_is_setup_data() and then add a bool early which
> determines which memremap variant is called.
>
> - unify the @size argument by dropping it and using a function local size.
> What we have there now is the definition of bitrot. :-\
>
> - replace all sizeof(*data), sizeof(struct setup_data) with a macro definition
> above the functions to unify it properly.
>
> What an ugly mess... :-\
>
> ---
> From: Baoquan He <bhe@redhat.com>
> Date: Wed, 11 Sep 2024 16:16:15 +0800
> Subject: [PATCH] x86/mm: Fix a kdump kernel failure on SME system when
> CONFIG_IMA_KEXEC=y
> MIME-Version: 1.0
> Content-Type: text/plain; charset=UTF-8
> Content-Transfer-Encoding: 8bit
>
> The kdump kernel is broken on SME systems with CONFIG_IMA_KEXEC=y enabled.
> Debugging traced the issue back to
>
> b69a2afd5afc ("x86/kexec: Carry forward IMA measurement log on kexec").
>
> Testing was previously not conducted on SME systems with CONFIG_IMA_KEXEC
> enabled, which led to the oversight, with the following incarnation:
>
> ...
> ima: No TPM chip found, activating TPM-bypass!
> Loading compiled-in module X.509 certificates
> Loaded X.509 cert 'Build time autogenerated kernel key: 18ae0bc7e79b64700122bb1d6a904b070fef2656'
> ima: Allocated hash algorithm: sha256
> Oops: general protection fault, probably for non-canonical address 0xcfacfdfe6660003e: 0000 [#1] PREEMPT SMP NOPTI
> CPU: 0 UID: 0 PID: 1 Comm: swapper/0 Not tainted 6.11.0-rc2+ #14
> Hardware name: Dell Inc. PowerEdge R7425/02MJ3T, BIOS 1.20.0 05/03/2023
> RIP: 0010:ima_restore_measurement_list
> Call Trace:
> <TASK>
> ? show_trace_log_lvl
> ? show_trace_log_lvl
> ? ima_load_kexec_buffer
> ? __die_body.cold
> ? die_addr
> ? exc_general_protection
> ? asm_exc_general_protection
> ? ima_restore_measurement_list
> ? vprintk_emit
> ? ima_load_kexec_buffer
> ima_load_kexec_buffer
> ima_init
> ? __pfx_init_ima
> init_ima
> ? __pfx_init_ima
> do_one_initcall
> do_initcalls
> ? __pfx_kernel_init
> kernel_init_freeable
> kernel_init
> ret_from_fork
> ? __pfx_kernel_init
> ret_from_fork_asm
> </TASK>
> Modules linked in:
> ---[ end trace 0000000000000000 ]---
> ...
> Kernel panic - not syncing: Fatal exception
> Kernel Offset: disabled
> Rebooting in 10 seconds..
>
> Adding debug printks showed that the stored addr and size of ima_kexec buffer
> are not decrypted correctly like:
>
> ima: ima_load_kexec_buffer, buffer:0xcfacfdfe6660003e, size:0xe48066052d5df359
>
> Three types of setup_data info
>
> — SETUP_EFI,
> - SETUP_IMA, and
> - SETUP_RNG_SEED
>
> are passed to the kexec/kdump kernel. Only the ima_kexec buffer
> experienced incorrect decryption. Debugging identified a bug in
> early_memremap_is_setup_data(), where an incorrect range calculation
> occurred due to the len variable in struct setup_data ended up only
> representing the length of the data field, excluding the struct's size,
> and thus leading to miscalculation.
>
> Address a similar issue in memremap_is_setup_data() while at it.
>
> [ bp: Heavily massage. ]
>
> Fixes: b3c72fc9a78e ("x86/boot: Introduce setup_indirect")
> Signed-off-by: Baoquan He <bhe@redhat.com>
> Signed-off-by: Borislav Petkov (AMD) <bp@alien8.de>
> Acked-by: Tom Lendacky <thomas.lendacky@amd.com>
> Cc: <stable@kernel.org>
> Link: https://lore.kernel.org/r/20240911081615.262202-3-bhe@redhat.com
> ---
> arch/x86/mm/ioremap.c | 6 ++++--
> 1 file changed, 4 insertions(+), 2 deletions(-)
>
> diff --git a/arch/x86/mm/ioremap.c b/arch/x86/mm/ioremap.c
> index 70b02fc61d93..8d29163568a7 100644
> --- a/arch/x86/mm/ioremap.c
> +++ b/arch/x86/mm/ioremap.c
> @@ -656,7 +656,8 @@ static bool memremap_is_setup_data(resource_size_t phys_addr,
> paddr_next = data->next;
> len = data->len;
>
> - if ((phys_addr > paddr) && (phys_addr < (paddr + len))) {
> + if ((phys_addr > paddr) &&
> + (phys_addr < (paddr + sizeof(struct setup_data) + len))) {
> memunmap(data);
> return true;
> }
> @@ -718,7 +719,8 @@ static bool __init early_memremap_is_setup_data(resource_size_t phys_addr,
> paddr_next = data->next;
> len = data->len;
>
> - if ((phys_addr > paddr) && (phys_addr < (paddr + len))) {
> + if ((phys_addr > paddr) &&
> + (phys_addr < (paddr + sizeof(struct setup_data) + len))) {
> early_memunmap(data, sizeof(*data));
> return true;
> }
> --
> 2.43.0
>
>
> --
> Regards/Gruss,
> Boris.
>
> https://people.kernel.org/tglx/notes-about-netiquette
>
_______________________________________________
kexec mailing list
kexec@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/kexec
next prev parent reply other threads:[~2024-11-13 12:56 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-09-11 8:16 [PATCH v3 0/2] x86/mm/sme: fix the kdump kernel breakage on SME system when CONFIG_IMA_KEXEC=y Baoquan He
2024-09-11 8:16 ` [PATCH v3 1/2] x86/mm: rename the confusing local variable in early_memremap_is_setup_data() Baoquan He
2024-10-29 18:11 ` Borislav Petkov
2024-10-30 0:53 ` Baoquan He
2024-10-30 12:49 ` Tom Lendacky
2024-10-31 3:41 ` Baoquan He
2024-11-01 16:18 ` Borislav Petkov
2024-11-02 0:23 ` Baoquan He
2024-11-02 11:06 ` Borislav Petkov
2024-11-06 11:20 ` Borislav Petkov
2024-11-07 9:30 ` Baoquan He
2024-11-13 12:55 ` Baoquan He [this message]
2024-11-13 13:10 ` Borislav Petkov
2024-09-11 8:16 ` [PATCH v3 2/2] x86/mm/sme: fix the kdump kernel breakage on SME system when CONFIG_IMA_KEXEC=y Baoquan He
2024-09-30 2:59 ` [PATCH v3 0/2] " Baoquan He
2024-10-29 7:20 ` Baoquan He
2024-10-30 1:23 ` Andrew Morton
2024-10-30 2:54 ` Baoquan He
2024-10-30 11:31 ` Borislav Petkov
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=ZzSh0/i0HXDnfUof@MiWiFi-R3L-srv \
--to=bhe@redhat.com \
--cc=bp@alien8.de \
--cc=daniel.kiper@oracle.com \
--cc=dyoung@redhat.com \
--cc=kexec@lists.infradead.org \
--cc=lijiang@redhat.com \
--cc=linux-kernel@vger.kernel.org \
--cc=noodles@fb.com \
--cc=thomas.lendacky@amd.com \
--cc=x86@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.