Commit 67548622 authored by Christophe Leroy's avatar Christophe Leroy Committed by Michael Ellerman
Browse files

powerpc/kuep: Remove 'nosmep' boot time parameter except for book3s/64



Deactivating KUEP at boot time is unrelevant for PPC32 and BOOK3E/64.

Remove it.

It allows to refactor setup_kuep() via a __weak function
that only PPC64s will overide for now.

Signed-off-by: default avatarChristophe Leroy <christophe.leroy@csgroup.eu>
[mpe: Fix CONFIG_PPC_BOOKS_64 -> CONFIG_PPC_BOOK3S_64 typo]
Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
Link: https://lore.kernel.org/r/4c36df18b41c988c4512f45d96220486adbe4c99.1634627931.git.christophe.leroy@csgroup.eu
parent 70428da9
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -3378,7 +3378,7 @@
			Disable SMAP (Supervisor Mode Access Prevention)
			even if it is supported by processor.

	nosmep		[X86,PPC]
	nosmep		[X86,PPC64s]
			Disable SMEP (Supervisor Mode Execution Prevention)
			even if it is supported by processor.

+0 −5
Original line number Diff line number Diff line
@@ -33,12 +33,7 @@ extern bool disable_kuap;
#include <linux/pgtable.h>

void setup_kup(void);

#ifdef CONFIG_PPC_KUEP
void setup_kuep(bool disabled);
#else
static inline void setup_kuep(bool disabled) { }
#endif /* CONFIG_PPC_KUEP */

#ifdef CONFIG_PPC_KUAP
void setup_kuap(bool disabled);
+0 −1
Original line number Diff line number Diff line
@@ -9,5 +9,4 @@ endif
obj-y += mmu.o mmu_context.o
obj-$(CONFIG_PPC_BOOK3S_603) += nohash_low.o
obj-$(CONFIG_PPC_BOOK3S_604) += hash_low.o tlb.o
obj-$(CONFIG_PPC_KUEP) += kuep.o
obj-$(CONFIG_PPC_KUAP) += kuap.o

arch/powerpc/mm/book3s32/kuep.c

deleted100644 → 0
+0 −13
Original line number Diff line number Diff line
// SPDX-License-Identifier: GPL-2.0-or-later

#include <asm/code-patching.h>
#include <asm/kup.h>
#include <asm/smp.h>

void setup_kuep(bool disabled)
{
	if (smp_processor_id() != boot_cpuid)
		return;

	pr_info("Activating Kernel Userspace Execution Prevention\n");
}
+15 −0
Original line number Diff line number Diff line
@@ -20,6 +20,7 @@
#include <linux/pgtable.h>
#include <asm/pgalloc.h>
#include <asm/kup.h>
#include <asm/smp.h>

phys_addr_t memstart_addr __ro_after_init = (phys_addr_t)~0ull;
EXPORT_SYMBOL_GPL(memstart_addr);
@@ -33,6 +34,9 @@ bool disable_kuap = !IS_ENABLED(CONFIG_PPC_KUAP);

static int __init parse_nosmep(char *p)
{
	if (!IS_ENABLED(CONFIG_PPC_BOOK3S_64))
		return 0;

	disable_kuep = true;
	pr_warn("Disabling Kernel Userspace Execution Prevention\n");
	return 0;
@@ -47,6 +51,17 @@ static int __init parse_nosmap(char *p)
}
early_param("nosmap", parse_nosmap);

void __weak setup_kuep(bool disabled)
{
	if (!IS_ENABLED(CONFIG_PPC_KUEP) || disabled)
		return;

	if (smp_processor_id() != boot_cpuid)
		return;

	pr_info("Activating Kernel Userspace Execution Prevention\n");
}

void setup_kup(void)
{
	setup_kuap(disable_kuap);
Loading