• Lecopzer Chen's avatar
    kasan: fix unaligned address is unhandled in kasan_remove_zero_shadow · a11a496e
    Lecopzer Chen authored
    During testing kasan_populate_early_shadow and kasan_remove_zero_shadow,
    if the shadow start and end address in kasan_remove_zero_shadow() is not
    aligned to PMD_SIZE, the remain unaligned PTE won't be removed.
    
    In the test case for kasan_remove_zero_shadow():
    
        shadow_start: 0xffffffb802000000, shadow end: 0xffffffbfbe000000
    
        3-level page table:
          PUD_SIZE: 0x40000000 PMD_SIZE: 0x200000 PAGE_SIZE: 4K
    
    0xffffffbf80000000 ~ 0xffffffbfbdf80000 will not be removed because in
    kasan_remove_pud_table(), kasan_pmd_table(*pud) is true but the next
    address is 0xffffffbfbdf80000 which is not aligned to PUD_SIZE.
    
    In the correct condition, this should fallback to the next level
    kasan_remove_pmd_table() but the condition flow always continue to skip
    the unaligned part.
    
    Fix by correcting the condition when next and addr are neither aligned.
    
    Link: https://lkml.kernel.org/r/20210103135621.83129-1-lecopzer@gmail.com
    Fixes: 0207df4f ("kernel/memremap, kasan: make ZONE_DEVICE with work with KASAN")
    Signed-off-by: default avatarLecopzer Chen <lecopzer.chen@mediatek.com>
    Cc: Andrey Ryabinin <aryabinin@virtuozzo.com>
    Cc: Dan Williams <dan.j.williams@intel.com>
    Cc: Dmitry Vyukov <dvyukov@google.com>
    Cc: Alexander Potapenko <glider@google.com>
    Cc: YJ Chiang <yj.chiang@mediatek.com>
    Cc: Andrey Konovalov <andreyknvl@google.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    a11a496e
init.c 11 KB