]> git.baikalelectronics.ru Git - kernel.git/commitdiff
powerpc/32s: Enable STRICT_MODULE_RWX for the 603 core
authorChristophe Leroy <christophe.leroy@csgroup.eu>
Mon, 17 Jan 2022 10:06:39 +0000 (10:06 +0000)
committerMichael Ellerman <mpe@ellerman.id.au>
Sat, 12 Feb 2022 11:47:42 +0000 (22:47 +1100)
The book3s/32 MMU doesn't support per page execution protection and
doesn't support RO protection for kernel pages.

However, on the 603 which implements software loaded TLBs, execution
protection is honored by the TLB Miss handler which doesn't load
Instruction TLB for non executable pages. And RO protection is
honored by clearing the C bit for RO pages, leading to DSI.

So on the 603, STRICT_MODULE_RWX is possible without much effort.
Don't disable STRICT_MODULE_RWX on book3s/32 and print a warning
in case STRICT_MODULE_RWX has been selected and the platform has
a Hardware HASH MMU.

Signed-off-by: Christophe Leroy <christophe.leroy@csgroup.eu>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Link: https://lore.kernel.org/r/1e6162f334167e75f1140082932e3a354b16daba.1642413973.git.christophe.leroy@csgroup.eu
arch/powerpc/Kconfig
arch/powerpc/mm/pgtable_32.c

index 2a851d31f1200ac8cd151f549e3f4f29dd16728a..28e4047e99e8ae8e1940c74dafb4d97ee89669fd 100644 (file)
@@ -135,7 +135,7 @@ config PPC
        select ARCH_HAS_SET_MEMORY
        select ARCH_HAS_STRICT_KERNEL_RWX       if (PPC_BOOK3S || PPC_8xx || 40x) && !HIBERNATION
        select ARCH_HAS_STRICT_KERNEL_RWX       if FSL_BOOKE && !HIBERNATION && !RANDOMIZE_BASE
-       select ARCH_HAS_STRICT_MODULE_RWX       if ARCH_HAS_STRICT_KERNEL_RWX && !PPC_BOOK3S_32
+       select ARCH_HAS_STRICT_MODULE_RWX       if ARCH_HAS_STRICT_KERNEL_RWX
        select ARCH_HAS_TICK_BROADCAST          if GENERIC_CLOCKEVENTS_BROADCAST
        select ARCH_HAS_UACCESS_FLUSHCACHE
        select ARCH_HAS_UBSAN_SANITIZE_ALL
index f71ededdc02a512cd5e5ec9a2329056b8353993e..a56ade39dc68afa7dbbb684a0a90ade6b461d4b9 100644 (file)
@@ -148,6 +148,9 @@ void mark_rodata_ro(void)
 {
        unsigned long numpages;
 
+       if (IS_ENABLED(CONFIG_STRICT_MODULE_RWX) && mmu_has_feature(MMU_FTR_HPTE_TABLE))
+               pr_warn("This platform has HASH MMU, STRICT_MODULE_RWX won't work\n");
+
        if (v_block_mapped((unsigned long)_stext + 1)) {
                mmu_mark_rodata_ro();
                ptdump_check_wx();