• Qing Zhang's avatar
    LoongArch: Add KASAN (Kernel Address Sanitizer) support · 5aa4ac64
    Qing Zhang authored
    1/8 of kernel addresses reserved for shadow memory. But for LoongArch,
    There are a lot of holes between different segments and valid address
    space (256T available) is insufficient to map all these segments to kasan
    shadow memory with the common formula provided by kasan core, saying
    (addr >> KASAN_SHADOW_SCALE_SHIFT) + KASAN_SHADOW_OFFSET
    
    So LoongArch has a arch-specific mapping formula, different segments are
    mapped individually, and only limited space lengths of these specific
    segments are mapped to shadow.
    
    At early boot stage the whole shadow region populated with just one
    physical page (kasan_early_shadow_page). Later, this page is reused as
    readonly zero shadow for some memory that kasan currently don't track.
    After mapping the physical memory, pages for shadow memory are allocated
    and mapped.
    
    Functions like memset()/memcpy()/memmove() do a lot of memory accesses.
    If bad pointer passed to one of these function it is important to be
    caught. Compiler's instrumentation cannot do this since these functions
    are written in assembly.
    
    KASan replaces memory functions with manually instrumented variants.
    Original functions declared as weak symbols so strong definitions in
    mm/kasan/kasan.c could replace them. Original functions have aliases
    with '__' prefix in names, so we could call non-instrumented variant
    if needed.
    Signed-off-by: default avatarQing Zhang <zhangqing@loongson.cn>
    Signed-off-by: default avatarHuacai Chen <chenhuacai@loongson.cn>
    5aa4ac64
kasan_init.c 7.43 KB