lkml.org 
[lkml]   [2022]   [Jan]   [17]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH] powerpc/32s: Enable STRICT_MODULE_RWX for the 603 core
    Date
    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>
    ---
    arch/powerpc/Kconfig | 2 +-
    arch/powerpc/mm/pgtable_32.c | 3 +++
    2 files changed, 4 insertions(+), 1 deletion(-)

    diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig
    index 0631c9241af3..cabd26b2c103 100644
    --- a/arch/powerpc/Kconfig
    +++ b/arch/powerpc/Kconfig
    @@ -140,7 +140,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
    diff --git a/arch/powerpc/mm/pgtable_32.c b/arch/powerpc/mm/pgtable_32.c
    index f71ededdc02a..a56ade39dc68 100644
    --- a/arch/powerpc/mm/pgtable_32.c
    +++ b/arch/powerpc/mm/pgtable_32.c
    @@ -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();
    --
    2.33.1
    \
     
     \ /
      Last update: 2022-01-17 11:07    [W:5.396 / U:0.464 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site