Skip to content

Commit

Permalink
powerpc: Use MODULES_VADDR if defined
Browse files Browse the repository at this point in the history
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
  • Loading branch information
chleroy authored and mpe committed Jul 26, 2020
1 parent ccc8fcf commit 7fbc22c
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 0 deletions.
11 changes: 11 additions & 0 deletions arch/powerpc/kernel/module.c
Expand Up @@ -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
6 changes: 6 additions & 0 deletions arch/powerpc/mm/kasan/kasan_init_32.c
Expand Up @@ -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)
Expand Down

0 comments on commit 7fbc22c

Please sign in to comment.