summaryrefslogtreecommitdiffstats
path: root/arch/powerpc
diff options
context:
space:
mode:
authorChristophe Leroy <christophe.leroy@csgroup.eu>2021-06-29 14:24:21 +0200
committerMichael Ellerman <mpe@ellerman.id.au>2021-06-30 14:21:02 +0200
commitfc4999864bca323f1b844fefe1b402632443c076 (patch)
tree171c9c12dbe85d4557c468fbe5a527089402c8b6 /arch/powerpc
parentpowerpc/32s: Fix setup_{kuap/kuep}() on SMP (diff)
downloadlinux-fc4999864bca323f1b844fefe1b402632443c076.tar.xz
linux-fc4999864bca323f1b844fefe1b402632443c076.zip
powerpc/4xx: Fix setup_kuep() on SMP
On SMP, setup_kuep() is also called from start_secondary() since commit 86f46f343272 ("powerpc/32s: Initialise KUAP and KUEP in C"). start_secondary() is not an __init function. Remove the __init marker from setup_kuep() and bail out when not caller on the first CPU as the work is already done. Fixes: 10248dcba120 ("powerpc/44x: Implement Kernel Userspace Exec Protection (KUEP)") Fixes: 86f46f343272 ("powerpc/32s: Initialise KUAP and KUEP in C") Reported-by: kernel test robot <lkp@intel.com> Signed-off-by: Christophe Leroy <christophe.leroy@csgroup.eu> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au> Link: https://lore.kernel.org/r/8ee05934288994a65743a987acb1558f12c0c8c1.1624969450.git.christophe.leroy@csgroup.eu
Diffstat (limited to 'arch/powerpc')
-rw-r--r--arch/powerpc/mm/nohash/44x.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/arch/powerpc/mm/nohash/44x.c b/arch/powerpc/mm/nohash/44x.c
index 7da6d1e9fc9b..e079f26b267e 100644
--- a/arch/powerpc/mm/nohash/44x.c
+++ b/arch/powerpc/mm/nohash/44x.c
@@ -25,6 +25,7 @@
#include <asm/page.h>
#include <asm/cacheflush.h>
#include <asm/code-patching.h>
+#include <asm/smp.h>
#include <mm/mmu_decl.h>
@@ -241,8 +242,11 @@ void __init mmu_init_secondary(int cpu)
#endif /* CONFIG_SMP */
#ifdef CONFIG_PPC_KUEP
-void __init setup_kuep(bool disabled)
+void setup_kuep(bool disabled)
{
+ if (smp_processor_id() != boot_cpuid)
+ return;
+
if (disabled)
patch_instruction_site(&patch__tlb_44x_kuep, ppc_inst(PPC_RAW_NOP()));
else