Re: [PATCH] x86: Parse CONFIG_CMDLINE in compressed kernel

From: Borislav Petkov
Date: Wed May 04 2022 - 04:59:28 EST


On Thu, Apr 07, 2022 at 05:40:14AM +0300, Baskov Evgeniy wrote:
> CONFIG_CMDLINE_BOOL and CONFIG_CMDLINE_OVERRIDE was ignored
> during options lookup in compressed kernel, including
> earlyprintk option, so it was impossible to get earlyprintk
> messages from that stage of boot process via command line
> provided at compile time. Being able to enable earlyprintk
> via compile-time option might be desirable for booting
> on systems with broken UEFI command line arguments via EFISTUB.
>
> Parse CONFIG_CMDLINE-related options correctly in compressed
> kernel code.
>
> Signed-off-by: Baskov Evgeniy <baskov@xxxxxxxxx>
>
> diff --git a/arch/x86/boot/compressed/cmdline.c b/arch/x86/boot/compressed/cmdline.c
> index f1add5d85da9..dd8cbbe61dff 100644
> --- a/arch/x86/boot/compressed/cmdline.c
> +++ b/arch/x86/boot/compressed/cmdline.c
> @@ -22,9 +22,49 @@ unsigned long get_cmd_line_ptr(void)
> }
> int cmdline_find_option(const char *option, char *buffer, int bufsize)
> {
> - return __cmdline_find_option(get_cmd_line_ptr(), option, buffer, bufsize);
> + int len = -1;
> + unsigned long cmdline_ptr;
> +
> + /*
> + * First try command line string provided by user,
> + * then try command line string configured at comple time.
> + * Skip first step if CONFIG_CMDLINE_OVERRIDE is enabled
> + * and parse only compile time command line.
> + */
> +
> + if (!IS_ENABLED(CONFIG_CMDLINE_OVERRIDE)) {
> + cmdline_ptr = get_cmd_line_ptr();
> + len = __cmdline_find_option(cmdline_ptr, option,
> + buffer, bufsize);
> + }
> +
> +#ifdef CONFIG_CMDLINE_BOOL
> + if (len < 0) {
> + cmdline_ptr = (unsigned long)CONFIG_CMDLINE;
> + len = __cmdline_find_option(cmdline_ptr, option,
> + buffer, bufsize);
> + }
> +#endif

Do I see it correctly that all this logic boils down to returning the
proper cmdline ptr and so you can do that once in get_cmd_line_ptr()
instead of duplicating the ifdeffery?

--
Regards/Gruss,
Boris.

https://people.kernel.org/tglx/notes-about-netiquette