From: Marc Zyngier <maz@kernel.org>
To: Will Deacon <will@kernel.org>
Cc: Rob Herring <robh@kernel.org>,
kernel-team@android.com, Arnd Bergmann <arnd@arndb.de>,
devicetree@vger.kernel.org,
Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
Doug Anderson <dianders@chromium.org>,
linux-kernel@vger.kernel.org,
Tyler Hicks <tyhicks@linux.microsoft.com>,
Palmer Dabbelt <palmer@dabbelt.com>,
Catalin Marinas <catalin.marinas@arm.com>,
Max Uvarov <muvarov@gmail.com>,
Frank Rowand <frowand.list@gmail.com>,
Ard Biesheuvel <ardb@kernel.org>,
linux-arm-kernel@lists.infradead.org
Subject: Re: [PATCH 1/2] arm64: cpufeatures: Fix handling of CONFIG_CMDLINE for idreg overrides
Date: Thu, 25 Feb 2021 13:53:56 +0000 [thread overview]
Message-ID: <87zgzsz217.wl-maz@kernel.org> (raw)
In-Reply-To: <20210225125921.13147-2-will@kernel.org>
On Thu, 25 Feb 2021 12:59:20 +0000,
Will Deacon <will@kernel.org> wrote:
>
> The built-in kernel commandline (CONFIG_CMDLINE) can be configured in
> three different ways:
>
> 1. CMDLINE_FORCE: Use CONFIG_CMDLINE instead of any bootloader args
> 2. CMDLINE_EXTEND: Append the bootloader args to CONFIG_CMDLINE
> 3. CMDLINE_FROM_BOOTLOADER: Only use CONFIG_CMDLINE if there aren't
> any bootloader args.
>
> The early cmdline parsing to detect idreg overrides gets (2) and (3)
> slightly wrong: in the case of (2) the bootloader args are parsed first
> and in the case of (3) the CMDLINE is always parsed.
>
> Fix these issues by moving the bootargs parsing out into a helper
> function and following the same logic as that used by the EFI stub.
>
> Cc: Marc Zyngier <maz@kernel.org>
> Fixes: 33200303553d ("arm64: cpufeature: Add an early command-line cpufeature override facility")
> Signed-off-by: Will Deacon <will@kernel.org>
> ---
> arch/arm64/kernel/idreg-override.c | 44 +++++++++++++++++-------------
> 1 file changed, 25 insertions(+), 19 deletions(-)
>
> diff --git a/arch/arm64/kernel/idreg-override.c b/arch/arm64/kernel/idreg-override.c
> index dffb16682330..cc071712c6f9 100644
> --- a/arch/arm64/kernel/idreg-override.c
> +++ b/arch/arm64/kernel/idreg-override.c
> @@ -163,33 +163,39 @@ static __init void __parse_cmdline(const char *cmdline, bool parse_aliases)
> } while (1);
> }
>
> -static __init void parse_cmdline(void)
> +static __init const u8 *get_bootargs_cmdline(void)
> {
> - if (!IS_ENABLED(CONFIG_CMDLINE_FORCE)) {
> - const u8 *prop;
> - void *fdt;
> - int node;
> + const u8 *prop;
> + void *fdt;
> + int node;
>
> - fdt = get_early_fdt_ptr();
> - if (!fdt)
> - goto out;
> + fdt = get_early_fdt_ptr();
> + if (!fdt)
> + return NULL;
>
> - node = fdt_path_offset(fdt, "/chosen");
> - if (node < 0)
> - goto out;
> + node = fdt_path_offset(fdt, "/chosen");
> + if (node < 0)
> + return NULL;
>
> - prop = fdt_getprop(fdt, node, "bootargs", NULL);
> - if (!prop)
> - goto out;
> + prop = fdt_getprop(fdt, node, "bootargs", NULL);
> + if (!prop)
> + return NULL;
>
> - __parse_cmdline(prop, true);
> + return strlen(prop) ? prop : NULL;
> +}
>
> - if (!IS_ENABLED(CONFIG_CMDLINE_EXTEND))
> - return;
> +static __init void parse_cmdline(void)
> +{
> + const u8 *prop = get_bootargs_cmdline();
> +
> + if (IS_ENABLED(CONFIG_CMDLINE_EXTEND) ||
> + IS_ENABLED(CONFIG_CMDLINE_FORCE) ||
> + !prop) {
The logic hurts, but I think I grok it now. The last term is actually
a reduction of
(IS_ENABLED(CONFIG_CMDLINE_FROM_BOOTLOADER) && !prop)
and we know for sure that if none of the other two terms are true,
then CMDLINE_FROM_BOOTLOADER *must* be enabled.
> + __parse_cmdline(CONFIG_CMDLINE, true);
> }
>
> -out:
> - __parse_cmdline(CONFIG_CMDLINE, true);
> + if (!IS_ENABLED(CONFIG_CMDLINE_FORCE) && prop)
> + __parse_cmdline(prop, true);
> }
>
> /* Keep checkers quiet */
I don't think we need to backport anything to stable for the nokaslr
handling, do we?
Otherwise,
Reviewed-by: Marc Zyngier <maz@kernel.org>
Thanks,
M.
--
Without deviation from the norm, progress is not possible.
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
WARNING: multiple messages have this Message-ID (diff)
From: Marc Zyngier <maz@kernel.org>
To: Will Deacon <will@kernel.org>
Cc: linux-kernel@vger.kernel.org, Max Uvarov <muvarov@gmail.com>,
Rob Herring <robh@kernel.org>, Ard Biesheuvel <ardb@kernel.org>,
Doug Anderson <dianders@chromium.org>,
Tyler Hicks <tyhicks@linux.microsoft.com>,
Frank Rowand <frowand.list@gmail.com>,
Arnd Bergmann <arnd@arndb.de>,
Palmer Dabbelt <palmer@dabbelt.com>,
Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
Catalin Marinas <catalin.marinas@arm.com>,
kernel-team@android.com, linux-arm-kernel@lists.infradead.org,
devicetree@vger.kernel.org
Subject: Re: [PATCH 1/2] arm64: cpufeatures: Fix handling of CONFIG_CMDLINE for idreg overrides
Date: Thu, 25 Feb 2021 13:53:56 +0000 [thread overview]
Message-ID: <87zgzsz217.wl-maz@kernel.org> (raw)
In-Reply-To: <20210225125921.13147-2-will@kernel.org>
On Thu, 25 Feb 2021 12:59:20 +0000,
Will Deacon <will@kernel.org> wrote:
>
> The built-in kernel commandline (CONFIG_CMDLINE) can be configured in
> three different ways:
>
> 1. CMDLINE_FORCE: Use CONFIG_CMDLINE instead of any bootloader args
> 2. CMDLINE_EXTEND: Append the bootloader args to CONFIG_CMDLINE
> 3. CMDLINE_FROM_BOOTLOADER: Only use CONFIG_CMDLINE if there aren't
> any bootloader args.
>
> The early cmdline parsing to detect idreg overrides gets (2) and (3)
> slightly wrong: in the case of (2) the bootloader args are parsed first
> and in the case of (3) the CMDLINE is always parsed.
>
> Fix these issues by moving the bootargs parsing out into a helper
> function and following the same logic as that used by the EFI stub.
>
> Cc: Marc Zyngier <maz@kernel.org>
> Fixes: 33200303553d ("arm64: cpufeature: Add an early command-line cpufeature override facility")
> Signed-off-by: Will Deacon <will@kernel.org>
> ---
> arch/arm64/kernel/idreg-override.c | 44 +++++++++++++++++-------------
> 1 file changed, 25 insertions(+), 19 deletions(-)
>
> diff --git a/arch/arm64/kernel/idreg-override.c b/arch/arm64/kernel/idreg-override.c
> index dffb16682330..cc071712c6f9 100644
> --- a/arch/arm64/kernel/idreg-override.c
> +++ b/arch/arm64/kernel/idreg-override.c
> @@ -163,33 +163,39 @@ static __init void __parse_cmdline(const char *cmdline, bool parse_aliases)
> } while (1);
> }
>
> -static __init void parse_cmdline(void)
> +static __init const u8 *get_bootargs_cmdline(void)
> {
> - if (!IS_ENABLED(CONFIG_CMDLINE_FORCE)) {
> - const u8 *prop;
> - void *fdt;
> - int node;
> + const u8 *prop;
> + void *fdt;
> + int node;
>
> - fdt = get_early_fdt_ptr();
> - if (!fdt)
> - goto out;
> + fdt = get_early_fdt_ptr();
> + if (!fdt)
> + return NULL;
>
> - node = fdt_path_offset(fdt, "/chosen");
> - if (node < 0)
> - goto out;
> + node = fdt_path_offset(fdt, "/chosen");
> + if (node < 0)
> + return NULL;
>
> - prop = fdt_getprop(fdt, node, "bootargs", NULL);
> - if (!prop)
> - goto out;
> + prop = fdt_getprop(fdt, node, "bootargs", NULL);
> + if (!prop)
> + return NULL;
>
> - __parse_cmdline(prop, true);
> + return strlen(prop) ? prop : NULL;
> +}
>
> - if (!IS_ENABLED(CONFIG_CMDLINE_EXTEND))
> - return;
> +static __init void parse_cmdline(void)
> +{
> + const u8 *prop = get_bootargs_cmdline();
> +
> + if (IS_ENABLED(CONFIG_CMDLINE_EXTEND) ||
> + IS_ENABLED(CONFIG_CMDLINE_FORCE) ||
> + !prop) {
The logic hurts, but I think I grok it now. The last term is actually
a reduction of
(IS_ENABLED(CONFIG_CMDLINE_FROM_BOOTLOADER) && !prop)
and we know for sure that if none of the other two terms are true,
then CMDLINE_FROM_BOOTLOADER *must* be enabled.
> + __parse_cmdline(CONFIG_CMDLINE, true);
> }
>
> -out:
> - __parse_cmdline(CONFIG_CMDLINE, true);
> + if (!IS_ENABLED(CONFIG_CMDLINE_FORCE) && prop)
> + __parse_cmdline(prop, true);
> }
>
> /* Keep checkers quiet */
I don't think we need to backport anything to stable for the nokaslr
handling, do we?
Otherwise,
Reviewed-by: Marc Zyngier <maz@kernel.org>
Thanks,
M.
--
Without deviation from the norm, progress is not possible.
next prev parent reply other threads:[~2021-02-25 13:55 UTC|newest]
Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-02-25 12:59 [PATCH 0/2] Fix CMDLINE_EXTEND handling for FDT "bootargs" Will Deacon
2021-02-25 12:59 ` Will Deacon
2021-02-25 12:59 ` [PATCH 1/2] arm64: cpufeatures: Fix handling of CONFIG_CMDLINE for idreg overrides Will Deacon
2021-02-25 12:59 ` Will Deacon
2021-02-25 13:53 ` Marc Zyngier [this message]
2021-02-25 13:53 ` Marc Zyngier
2021-02-25 14:04 ` Will Deacon
2021-02-25 14:04 ` Will Deacon
2021-02-25 12:59 ` [PATCH 2/2] of/fdt: Append bootloader arguments when CMDLINE_EXTEND=y Will Deacon
2021-02-25 12:59 ` Will Deacon
2021-02-25 14:08 ` Marc Zyngier
2021-02-25 14:08 ` Marc Zyngier
2021-03-03 19:56 ` kernel test robot
2021-03-01 14:19 ` [PATCH 0/2] Fix CMDLINE_EXTEND handling for FDT "bootargs" Rob Herring
2021-03-01 14:19 ` Rob Herring
2021-03-01 14:41 ` Will Deacon
2021-03-01 14:41 ` Will Deacon
2021-03-01 17:26 ` Rob Herring
2021-03-01 17:26 ` Rob Herring
2021-03-01 17:26 ` Rob Herring
2021-03-01 17:45 ` Christophe Leroy
2021-03-01 17:45 ` Christophe Leroy
2021-03-01 17:45 ` Christophe Leroy
2021-03-02 14:56 ` Rob Herring
2021-03-02 14:56 ` Rob Herring
2021-03-02 14:56 ` Rob Herring
2021-03-02 15:16 ` Christophe Leroy
2021-03-02 15:16 ` Christophe Leroy
2021-03-02 15:16 ` Christophe Leroy
2021-03-02 17:12 ` Daniel Walker
2021-03-02 17:12 ` Daniel Walker
2021-03-02 17:12 ` Daniel Walker
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=87zgzsz217.wl-maz@kernel.org \
--to=maz@kernel.org \
--cc=ardb@kernel.org \
--cc=arnd@arndb.de \
--cc=catalin.marinas@arm.com \
--cc=devicetree@vger.kernel.org \
--cc=dianders@chromium.org \
--cc=frowand.list@gmail.com \
--cc=gregkh@linuxfoundation.org \
--cc=kernel-team@android.com \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=muvarov@gmail.com \
--cc=palmer@dabbelt.com \
--cc=robh@kernel.org \
--cc=tyhicks@linux.microsoft.com \
--cc=will@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.