Messages in this thread | | | From | Linus Walleij <> | Date | Thu, 1 Sep 2022 15:12:12 +0200 | Subject | Re: [PATCH] ARM: kasan: Only map modules if CONFIG_KASAN_VMALLOC=n |
| |
On Thu, Sep 1, 2022 at 10:42 AM Alexander Sverdlin <alexander.sverdlin@nokia.com> wrote:
> >> - 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)); > > So the way I understand it is that modules are first and foremost loaded into > > the area MODULES_VADDR .. MODULES_END, and then after that is out, > > they get loaded into VMALLOC. See arch/arm/kernel/module.c, module_alloc(). > > yes, but both areas are managed by __vmalloc_node_range().
Owww!
> > If you do this, how are the addresses between MODULES_VADDR..MODULES_END > > shadowed when using CONFIG_KASAN_VMALLOC? > > That's the thing, __vmalloc_node_range() doesn't differentiate between address > ranges and tries first to recreate [already existing] shadow mapping, and then > vfree() unconditionally frees the mapping and the page. > > vmalloc() KASAN handling is generic, module_alloc() implemented via vmalloc() > is however ARM-specific. Even though we could teach vmalloc() about MODULES_VADDR > and MODULES_END (and don't call kasan_ instrumentation on these), but, this is > ARM-specifics that it's used for this range.
OK I get it. Maybe this warrants a comment in the code explaining the above behaviour (also in commitlog) so nobody gets confused.
With that: Reviewed-by: Linus Walleij <linus.walleij@linaro.org>
Yours. Linus Walleij
| |