]> git.proxmox.com Git - mirror_ubuntu-hirsute-kernel.git/commitdiff
powerpc/32s: Only leave NX unset on segments used for modules
authorChristophe Leroy <christophe.leroy@csgroup.eu>
Mon, 29 Jun 2020 11:15:22 +0000 (11:15 +0000)
committerMichael Ellerman <mpe@ellerman.id.au>
Sun, 26 Jul 2020 14:01:30 +0000 (00:01 +1000)
Instead of leaving NX unset on all segments above the start
of vmalloc space, only leave NX unset on segments used for
modules.

Signed-off-by: Christophe Leroy <christophe.leroy@csgroup.eu>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Link: https://lore.kernel.org/r/7172c0f5253419315e434a1816ee3d6ed6505bc0.1593428200.git.christophe.leroy@csgroup.eu
arch/powerpc/mm/book3s32/mmu.c

index 03b6ba54460e2e67afc91fe66c2cdb65ccce5c99..c0162911f6cbdce7b3677795dd8176932669855f 100644 (file)
@@ -187,6 +187,17 @@ unsigned long __init mmu_mapin_ram(unsigned long base, unsigned long top)
        return __mmu_mapin_ram(border, top);
 }
 
+static bool is_module_segment(unsigned long addr)
+{
+       if (!IS_ENABLED(CONFIG_MODULES))
+               return false;
+       if (addr < ALIGN_DOWN(VMALLOC_START, SZ_256M))
+               return false;
+       if (addr >= ALIGN(VMALLOC_END, SZ_256M))
+               return false;
+       return true;
+}
+
 void mmu_mark_initmem_nx(void)
 {
        int nb = mmu_has_feature(MMU_FTR_USE_HIGH_BATS) ? 8 : 4;
@@ -223,9 +234,9 @@ void mmu_mark_initmem_nx(void)
 
        for (i = TASK_SIZE >> 28; i < 16; i++) {
                /* Do not set NX on VM space for modules */
-               if (IS_ENABLED(CONFIG_MODULES) &&
-                   (VMALLOC_START & 0xf0000000) == i << 28)
-                       break;
+               if (is_module_segment(i << 28))
+                       continue;
+
                mtsrin(mfsrin(i << 28) | 0x10000000, i << 28);
        }
 }