aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRussell Currey <ruscur@russell.cc>2019-04-18 02:51:22 -0400
committerMichael Ellerman <mpe@ellerman.id.au>2019-04-21 09:06:01 -0400
commit1bb2bae2e6c7d94e3bc1fdce06baf31b8d811ed6 (patch)
treec51c5b211f9bac5da304cda127ce82351139d5a1
parentb28c97505eb1a5265e367c398c3406be6ce5e313 (diff)
powerpc/mm/radix: Use KUEP API for Radix MMU
Execution protection already exists on radix, this just refactors the radix init to provide the KUEP setup function instead. Thus, the only functional change is that it can now be disabled. Signed-off-by: Russell Currey <ruscur@russell.cc> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
-rw-r--r--arch/powerpc/mm/pgtable-radix.c12
-rw-r--r--arch/powerpc/platforms/Kconfig.cputype1
2 files changed, 10 insertions, 3 deletions
diff --git a/arch/powerpc/mm/pgtable-radix.c b/arch/powerpc/mm/pgtable-radix.c
index 154472a28c77..8616b291bcec 100644
--- a/arch/powerpc/mm/pgtable-radix.c
+++ b/arch/powerpc/mm/pgtable-radix.c
@@ -531,8 +531,15 @@ static void radix_init_amor(void)
531 mtspr(SPRN_AMOR, (3ul << 62)); 531 mtspr(SPRN_AMOR, (3ul << 62));
532} 532}
533 533
534static void radix_init_iamr(void) 534#ifdef CONFIG_PPC_KUEP
535void setup_kuep(bool disabled)
535{ 536{
537 if (disabled || !early_radix_enabled())
538 return;
539
540 if (smp_processor_id() == boot_cpuid)
541 pr_info("Activating Kernel Userspace Execution Prevention\n");
542
536 /* 543 /*
537 * Radix always uses key0 of the IAMR to determine if an access is 544 * Radix always uses key0 of the IAMR to determine if an access is
538 * allowed. We set bit 0 (IBM bit 1) of key0, to prevent instruction 545 * allowed. We set bit 0 (IBM bit 1) of key0, to prevent instruction
@@ -540,6 +547,7 @@ static void radix_init_iamr(void)
540 */ 547 */
541 mtspr(SPRN_IAMR, (1ul << 62)); 548 mtspr(SPRN_IAMR, (1ul << 62));
542} 549}
550#endif
543 551
544void __init radix__early_init_mmu(void) 552void __init radix__early_init_mmu(void)
545{ 553{
@@ -601,7 +609,6 @@ void __init radix__early_init_mmu(void)
601 609
602 memblock_set_current_limit(MEMBLOCK_ALLOC_ANYWHERE); 610 memblock_set_current_limit(MEMBLOCK_ALLOC_ANYWHERE);
603 611
604 radix_init_iamr();
605 radix_init_pgtable(); 612 radix_init_pgtable();
606 /* Switch to the guard PID before turning on MMU */ 613 /* Switch to the guard PID before turning on MMU */
607 radix__switch_mmu_context(NULL, &init_mm); 614 radix__switch_mmu_context(NULL, &init_mm);
@@ -623,7 +630,6 @@ void radix__early_init_mmu_secondary(void)
623 __pa(partition_tb) | (PATB_SIZE_SHIFT - 12)); 630 __pa(partition_tb) | (PATB_SIZE_SHIFT - 12));
624 radix_init_amor(); 631 radix_init_amor();
625 } 632 }
626 radix_init_iamr();
627 633
628 radix__switch_mmu_context(NULL, &init_mm); 634 radix__switch_mmu_context(NULL, &init_mm);
629 if (cpu_has_feature(CPU_FTR_HVMODE)) 635 if (cpu_has_feature(CPU_FTR_HVMODE))
diff --git a/arch/powerpc/platforms/Kconfig.cputype b/arch/powerpc/platforms/Kconfig.cputype
index 457fc3a5ed93..60371784c9f1 100644
--- a/arch/powerpc/platforms/Kconfig.cputype
+++ b/arch/powerpc/platforms/Kconfig.cputype
@@ -326,6 +326,7 @@ config PPC_RADIX_MMU
326 bool "Radix MMU Support" 326 bool "Radix MMU Support"
327 depends on PPC_BOOK3S_64 327 depends on PPC_BOOK3S_64
328 select ARCH_HAS_GIGANTIC_PAGE if (MEMORY_ISOLATION && COMPACTION) || CMA 328 select ARCH_HAS_GIGANTIC_PAGE if (MEMORY_ISOLATION && COMPACTION) || CMA
329 select PPC_HAVE_KUEP
329 default y 330 default y
330 help 331 help
331 Enable support for the Power ISA 3.0 Radix style MMU. Currently this 332 Enable support for the Power ISA 3.0 Radix style MMU. Currently this