powerpc: Use MODULES_VADDR if defined
In order to allow allocation of modules outside of vmalloc space, use MODULES_VADDR and MODULES_END when MODULES_VADDR is defined. Redefine module_alloc() when MODULES_VADDR defined. Unmap corresponding KASAN shadow memory. Signed-off-by: Christophe Leroy <christophe.leroy@csgroup.eu> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au> Link: https://lore.kernel.org/r/7ecf5fff1eef67d450e73fc412b6ec3818483d75.1593428200.git.christophe.leroy@csgroup.eu
This commit is contained in:
parent
ccc8fcf72a
commit
7fbc22ce29
|
@ -86,3 +86,14 @@ int module_finalize(const Elf_Ehdr *hdr,
|
|||
|
||||
return 0;
|
||||
}
|
||||
|
||||
#ifdef MODULES_VADDR
|
||||
void *module_alloc(unsigned long size)
|
||||
{
|
||||
BUILD_BUG_ON(TASK_SIZE > MODULES_VADDR);
|
||||
|
||||
return __vmalloc_node_range(size, 1, MODULES_VADDR, MODULES_END, GFP_KERNEL,
|
||||
PAGE_KERNEL_EXEC, VM_FLUSH_RESET_PERMS, NUMA_NO_NODE,
|
||||
__builtin_return_address(0));
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -115,6 +115,12 @@ static void __init kasan_unmap_early_shadow_vmalloc(void)
|
|||
unsigned long k_end = (unsigned long)kasan_mem_to_shadow((void *)VMALLOC_END);
|
||||
|
||||
kasan_update_early_region(k_start, k_end, __pte(0));
|
||||
|
||||
#ifdef MODULES_VADDR
|
||||
k_start = (unsigned long)kasan_mem_to_shadow((void *)MODULES_VADDR);
|
||||
k_end = (unsigned long)kasan_mem_to_shadow((void *)MODULES_END);
|
||||
kasan_update_early_region(k_start, k_end, __pte(0));
|
||||
#endif
|
||||
}
|
||||
|
||||
void __init kasan_mmu_init(void)
|
||||
|
|
Loading…
Reference in New Issue