summaryrefslogtreecommitdiffstats
path: root/arch/arm/mm
diff options
context:
space:
mode:
authorLecopzer Chen <lecopzer.chen@mediatek.com>2022-04-27 15:29:01 +0100
committerRussell King (Oracle) <rmk+kernel@armlinux.org.uk>2022-07-28 15:09:12 +0100
commit565cbaad83d83e288927b96565211109bc984007 (patch)
tree5d507870ba49bc5873ebce182a460e3e3b5c495c /arch/arm/mm
parentff6992735ade75aae3e35d16b17da1008d753d28 (diff)
downloadlinux-stable-565cbaad83d83e288927b96565211109bc984007.tar.gz
linux-stable-565cbaad83d83e288927b96565211109bc984007.tar.bz2
linux-stable-565cbaad83d83e288927b96565211109bc984007.zip
ARM: 9202/1: kasan: support CONFIG_KASAN_VMALLOC
Simply make shadow of vmalloc area mapped on demand. Since the virtual address of vmalloc for Arm is also between MODULE_VADDR and 0x100000000 (ZONE_HIGHMEM), which means the shadow address has already included between KASAN_SHADOW_START and KASAN_SHADOW_END. Thus we need to change nothing for memory map of Arm. This can fix ARM_MODULE_PLTS with KASan, support KASan for higmem and support CONFIG_VMAP_STACK with KASan. Signed-off-by: Lecopzer Chen <lecopzer.chen@mediatek.com> Tested-by: Linus Walleij <linus.walleij@linaro.org> Reviewed-by: Linus Walleij <linus.walleij@linaro.org> Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
Diffstat (limited to 'arch/arm/mm')
-rw-r--r--arch/arm/mm/kasan_init.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/arch/arm/mm/kasan_init.c b/arch/arm/mm/kasan_init.c
index 5ad0d6c56d56..29caee9c79ce 100644
--- a/arch/arm/mm/kasan_init.c
+++ b/arch/arm/mm/kasan_init.c
@@ -236,7 +236,11 @@ void __init kasan_init(void)
clear_pgds(KASAN_SHADOW_START, KASAN_SHADOW_END);
- kasan_populate_early_shadow(kasan_mem_to_shadow((void *)VMALLOC_START),
+ if (!IS_ENABLED(CONFIG_KASAN_VMALLOC))
+ kasan_populate_early_shadow(kasan_mem_to_shadow((void *)VMALLOC_START),
+ kasan_mem_to_shadow((void *)VMALLOC_END));
+
+ kasan_populate_early_shadow(kasan_mem_to_shadow((void *)VMALLOC_END),
kasan_mem_to_shadow((void *)-1UL) + 1);
for_each_mem_range(i, &pa_start, &pa_end) {