Message ID | 20220905122754.32590-1-alexander.sverdlin@nokia.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | [v2] ARM: kasan: Only map modules if CONFIG_KASAN_VMALLOC=n | expand |
Hello Linus, On 05/09/2022 15:38, Linus Walleij wrote: >> In case CONFIG_KASAN_VMALLOC=y kasan_populate_vmalloc() allocates the >> shadow pages dynamically. But even worse is that kasan_release_vmalloc() >> releases them, which is not compatible with create_mapping() of >> MODULES_VADDR..MODULES_END range: >> >> BUG: Bad page state in process kworker/9:1 pfn:2068b [...] >> >> Reviewed-by: Linus Walleij <linus.walleij@linaro.org> >> Signed-off-by: Alexander Sverdlin <alexander.sverdlin@nokia.com> > Thanks Alexander, will you submit this to Russell's patch tracker please? done! https://www.arm.linux.org.uk/developer/patches/viewpatch.php?id=9242/1 Thank you for the quick review!
diff --git a/arch/arm/mm/kasan_init.c b/arch/arm/mm/kasan_init.c index 29caee9..46d9f4a 100644 --- a/arch/arm/mm/kasan_init.c +++ b/arch/arm/mm/kasan_init.c @@ -268,12 +268,17 @@ void __init kasan_init(void) /* * 1. The module global variables are in MODULES_VADDR ~ MODULES_END, - * so we need to map this area. + * so we need to map this area if CONFIG_KASAN_VMALLOC=n. With + * VMALLOC support KASAN will manage this region dynamically, + * refer to kasan_populate_vmalloc() and ARM's implementation of + * module_alloc(). * 2. PKMAP_BASE ~ PKMAP_BASE+PMD_SIZE's shadow and MODULES_VADDR * ~ MODULES_END's shadow is in the same PMD_SIZE, so we can't * use kasan_populate_zero_shadow. */ - create_mapping((void *)MODULES_VADDR, (void *)(PKMAP_BASE + PMD_SIZE)); + if (!IS_ENABLED(CONFIG_KASAN_VMALLOC) && IS_ENABLED(CONFIG_MODULES)) + create_mapping((void *)MODULES_VADDR, (void *)(MODULES_END)); + create_mapping((void *)PKMAP_BASE, (void *)(PKMAP_BASE + PMD_SIZE)); /* * KAsan may reuse the contents of kasan_early_shadow_pte directly, so