linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] arm64: Move jump_label_init() before parse_early_param()
@ 2019-06-26 20:51 Kees Cook
  2019-06-27  7:30 ` Ard Biesheuvel
  2019-06-27  8:02 ` Catalin Marinas
  0 siblings, 2 replies; 7+ messages in thread
From: Kees Cook @ 2019-06-26 20:51 UTC (permalink / raw)
  To: Catalin Marinas
  Cc: linux-kernel, Alexander Potapenko, Qian Cai, Ard Biesheuvel

While jump_label_init() was moved earlier in the boot process in commit
efd9e03facd0 ("arm64: Use static keys for CPU features"), it wasn't
early enough for early params to use it. The old state of things was as
described here...

init/main.c calls out to arch-specific things before general jump
label and early param handling:

asmlinkage __visible void __init start_kernel(void)
{
        ...
        setup_arch(&command_line);
        ...
        smp_prepare_boot_cpu();
        ...
        /* parameters may set static keys */
        jump_label_init();
        parse_early_param();
        ...
}

x86 setup_arch() wants those earlier, so it handles jump label and
early param:

void __init setup_arch(char **cmdline_p)
{
        ...
        jump_label_init();
        ...
        parse_early_param();
        ...
}

arm64 setup_arch() only had early param:

void __init setup_arch(char **cmdline_p)
{
        ...
        parse_early_param();
        ...
}

with jump label later in smp_prepare_boot_cpu():

void __init smp_prepare_boot_cpu(void)
{
        ...
        jump_label_init();
        ...
}

This moves arm64 jump_label_init() from smp_prepare_boot_cpu() to
setup_arch(), as done already on x86, in preparation from early param
usage in the init_on_alloc/free() series:
https://lkml.kernel.org/r/1561572949.5154.81.camel@lca.pw

Signed-off-by: Kees Cook <keescook@chromium.org>
---
 arch/arm64/kernel/setup.c | 5 +++++
 arch/arm64/kernel/smp.c   | 5 -----
 2 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/arch/arm64/kernel/setup.c b/arch/arm64/kernel/setup.c
index 7e541f947b4c..9c4bad7d7131 100644
--- a/arch/arm64/kernel/setup.c
+++ b/arch/arm64/kernel/setup.c
@@ -283,6 +283,11 @@ void __init setup_arch(char **cmdline_p)
 
 	setup_machine_fdt(__fdt_pointer);
 
+	/*
+	 * Initialise the static keys early as they may be enabled by the
+	 * cpufeature code and early parameters.
+	 */
+	jump_label_init();
 	parse_early_param();
 
 	/*
diff --git a/arch/arm64/kernel/smp.c b/arch/arm64/kernel/smp.c
index 6dcf9607d770..20c456b3862c 100644
--- a/arch/arm64/kernel/smp.c
+++ b/arch/arm64/kernel/smp.c
@@ -424,11 +424,6 @@ void __init smp_cpus_done(unsigned int max_cpus)
 void __init smp_prepare_boot_cpu(void)
 {
 	set_my_cpu_offset(per_cpu_offset(smp_processor_id()));
-	/*
-	 * Initialise the static keys early as they may be enabled by the
-	 * cpufeature code.
-	 */
-	jump_label_init();
 	cpuinfo_store_boot_cpu();
 
 	/*
-- 
2.17.1


-- 
Kees Cook

^ permalink raw reply related	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2019-06-28 14:38 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-06-26 20:51 [PATCH] arm64: Move jump_label_init() before parse_early_param() Kees Cook
2019-06-27  7:30 ` Ard Biesheuvel
2019-06-27  8:02 ` Catalin Marinas
2019-06-27 15:58   ` Kees Cook
2019-06-27 16:25     ` Catalin Marinas
2019-06-28  9:26       ` Alexander Potapenko
2019-06-28 14:38         ` Kees Cook

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).