powerpc/32s: Initialise KUAP and KUEP in C
In order to selectively activate KUAP and KUEP in a following patch, perform KUAP and KUEP initialisation in C. Unlike PPC64, PPC32 doesn't have an early_setup_secondary(), so do it in start_secondary(). Signed-off-by: Christophe Leroy <christophe.leroy@csgroup.eu> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au> Link: https://lore.kernel.org/r/87be72023448dd4e476744ed279b8c04b8d08a1c.1622708530.git.christophe.leroy@csgroup.eu
This commit is contained in:
parent
882136fb2f
commit
86f46f3432
@ -934,12 +934,6 @@ _GLOBAL(load_segment_registers)
|
|||||||
li r0, NUM_USER_SEGMENTS /* load up user segment register values */
|
li r0, NUM_USER_SEGMENTS /* load up user segment register values */
|
||||||
mtctr r0 /* for context 0 */
|
mtctr r0 /* for context 0 */
|
||||||
li r3, 0 /* Kp = 0, Ks = 0, VSID = 0 */
|
li r3, 0 /* Kp = 0, Ks = 0, VSID = 0 */
|
||||||
#ifdef CONFIG_PPC_KUEP
|
|
||||||
oris r3, r3, SR_NX@h /* Set Nx */
|
|
||||||
#endif
|
|
||||||
#ifdef CONFIG_PPC_KUAP
|
|
||||||
oris r3, r3, SR_KS@h /* Set Ks */
|
|
||||||
#endif
|
|
||||||
li r4, 0
|
li r4, 0
|
||||||
3: mtsrin r3, r4
|
3: mtsrin r3, r4
|
||||||
addi r3, r3, 0x111 /* increment VSID */
|
addi r3, r3, 0x111 /* increment VSID */
|
||||||
|
@ -1541,6 +1541,10 @@ void start_secondary(void *unused)
|
|||||||
{
|
{
|
||||||
unsigned int cpu = raw_smp_processor_id();
|
unsigned int cpu = raw_smp_processor_id();
|
||||||
|
|
||||||
|
/* PPC64 calls setup_kup() in early_setup_secondary() */
|
||||||
|
if (IS_ENABLED(CONFIG_PPC32))
|
||||||
|
setup_kup();
|
||||||
|
|
||||||
mmgrab(&init_mm);
|
mmgrab(&init_mm);
|
||||||
current->active_mm = &init_mm;
|
current->active_mm = &init_mm;
|
||||||
|
|
||||||
|
@ -1,9 +1,15 @@
|
|||||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
|
|
||||||
#include <asm/kup.h>
|
#include <asm/kup.h>
|
||||||
|
#include <asm/smp.h>
|
||||||
|
|
||||||
void __init setup_kuap(bool disabled)
|
void __init setup_kuap(bool disabled)
|
||||||
{
|
{
|
||||||
|
kuap_update_sr(mfsr(0) | SR_KS, 0, TASK_SIZE);
|
||||||
|
|
||||||
|
if (smp_processor_id() != boot_cpuid)
|
||||||
|
return;
|
||||||
|
|
||||||
pr_info("Activating Kernel Userspace Access Protection\n");
|
pr_info("Activating Kernel Userspace Access Protection\n");
|
||||||
|
|
||||||
if (disabled)
|
if (disabled)
|
||||||
|
@ -1,9 +1,15 @@
|
|||||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
|
|
||||||
#include <asm/kup.h>
|
#include <asm/kup.h>
|
||||||
|
#include <asm/smp.h>
|
||||||
|
|
||||||
void __init setup_kuep(bool disabled)
|
void __init setup_kuep(bool disabled)
|
||||||
{
|
{
|
||||||
|
kuep_lock();
|
||||||
|
|
||||||
|
if (smp_processor_id() != boot_cpuid)
|
||||||
|
return;
|
||||||
|
|
||||||
pr_info("Activating Kernel Userspace Execution Prevention\n");
|
pr_info("Activating Kernel Userspace Execution Prevention\n");
|
||||||
|
|
||||||
if (disabled)
|
if (disabled)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user