diff options
author | Vasily Gorbik <gor@linux.ibm.com> | 2017-11-17 18:22:24 +0100 |
---|---|---|
committer | Martin Schwidefsky <schwidefsky@de.ibm.com> | 2018-10-09 11:21:23 +0200 |
commit | 793213a82de4ccc96f394ea5deaaf57c0bb01f0b (patch) | |
tree | 49afe68d1ca1ed84868329f647fee2483f3ebb62 /arch/s390/mm | |
parent | 0dac8f6bc3699f28d807ad3a5ec575e18da8ba62 (diff) | |
download | linux-793213a82de4ccc96f394ea5deaaf57c0bb01f0b.tar.bz2 |
s390/kasan: dynamic shadow mem allocation for modules
Move from modules area entire shadow memory preallocation to dynamic
allocation per module load.
This behaivior has been introduced for x86 with bebf56a1b: "This patch
also forces module_alloc() to return 8*PAGE_SIZE aligned address making
shadow memory handling ( kasan_module_alloc()/kasan_module_free() )
more simple. Such alignment guarantees that each shadow page backing
modules address space correspond to only one module_alloc() allocation"
Signed-off-by: Vasily Gorbik <gor@linux.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
Diffstat (limited to 'arch/s390/mm')
-rw-r--r-- | arch/s390/mm/kasan_init.c | 11 |
1 files changed, 3 insertions, 8 deletions
diff --git a/arch/s390/mm/kasan_init.c b/arch/s390/mm/kasan_init.c index b888cbbbcf0d..714ac41e3ee5 100644 --- a/arch/s390/mm/kasan_init.c +++ b/arch/s390/mm/kasan_init.c @@ -214,8 +214,6 @@ void __init kasan_early_init(void) memsize = min(max_physmem_end, KASAN_SHADOW_START); shadow_alloc_size = memsize >> KASAN_SHADOW_SCALE_SHIFT; - if (IS_ENABLED(CONFIG_MODULES)) - shadow_alloc_size += MODULES_LEN >> KASAN_SHADOW_SCALE_SHIFT; pgalloc_low = round_up((unsigned long)_end, _SEGMENT_SIZE); if (IS_ENABLED(CONFIG_BLK_DEV_INITRD)) { initrd_end = @@ -239,18 +237,15 @@ void __init kasan_early_init(void) * +- shadow end -+ | mapping | * | ... gap ... |\ | (untracked) | * +- modules vaddr -+ \ +----------------+ - * | 2Gb | \| 256Mb | + * | 2Gb | \| unmapped | allocated per module * +-----------------+ +- shadow end ---+ */ /* populate identity mapping */ kasan_early_vmemmap_populate(0, memsize, POPULATE_ONE2ONE); - /* populate kasan shadow (for identity mapping / modules / zero page) */ + /* populate kasan shadow (for identity mapping and zero page mapping) */ kasan_early_vmemmap_populate(__sha(0), __sha(memsize), POPULATE_MAP); - if (IS_ENABLED(CONFIG_MODULES)) { + if (IS_ENABLED(CONFIG_MODULES)) untracked_mem_end = vmax - MODULES_LEN; - kasan_early_vmemmap_populate(__sha(untracked_mem_end), - __sha(vmax), POPULATE_MAP); - } kasan_early_vmemmap_populate(__sha(memsize), __sha(untracked_mem_end), POPULATE_ZERO_SHADOW); kasan_set_pgd(early_pg_dir, asce_type); |