• Andrey Konovalov's avatar
    kasan: fix zeroing vmalloc memory with HW_TAGS · 6c2f761d
    Andrey Konovalov authored
    HW_TAGS KASAN skips zeroing page_alloc allocations backing vmalloc
    mappings via __GFP_SKIP_ZERO.  Instead, these pages are zeroed via
    kasan_unpoison_vmalloc() by passing the KASAN_VMALLOC_INIT flag.
    
    The problem is that __kasan_unpoison_vmalloc() does not zero pages when
    either kasan_vmalloc_enabled() or is_vmalloc_or_module_addr() fail.
    
    Thus:
    
    1. Change __vmalloc_node_range() to only set KASAN_VMALLOC_INIT when
       __GFP_SKIP_ZERO is set.
    
    2. Change __kasan_unpoison_vmalloc() to always zero pages when the
       KASAN_VMALLOC_INIT flag is set.
    
    3. Add WARN_ON() asserts to check that KASAN_VMALLOC_INIT cannot be set
       in other early return paths of __kasan_unpoison_vmalloc().
    
    Also clean up the comment in __kasan_unpoison_vmalloc.
    
    Link: https://lkml.kernel.org/r/4bc503537efdc539ffc3f461c1b70162eea31cf6.1654798516.git.andreyknvl@google.com
    Fixes: 23689e91 ("kasan, vmalloc: add vmalloc tagging for HW_TAGS")
    Signed-off-by: default avatarAndrey Konovalov <andreyknvl@google.com>
    Cc: Marco Elver <elver@google.com>
    Cc: Alexander Potapenko <glider@google.com>
    Cc: Dmitry Vyukov <dvyukov@google.com>
    Cc: Andrey Ryabinin <ryabinin.a.a@gmail.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    6c2f761d
hw_tags.c 9.06 KB