powerpc/32s: Only leave NX unset on segments used for modules
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
This commit is contained in:
parent
7fbc22ce29
commit
c496433197
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue