Skip to content
  • Andrey Ryabinin's avatar
    x86/mm/ptdump: Optimize check for W+X mappings for CONFIG_KASAN=y · 243b72aa
    Andrey Ryabinin authored
    
    
    Enabling both DEBUG_WX=y and KASAN=y options significantly increases
    boot time (dozens of seconds at least).
    KASAN fills kernel page tables with repeated values to map several
    TBs of the virtual memory to the single kasan_zero_page:
    
        kasan_zero_pud ->
            kasan_zero_pmd->
                kasan_zero_pte->
                    kasan_zero_page
    
    So, the page table walker used to find W+X mapping check the same
    kasan_zero_p?d page table entries a lot more than once.
    With patch pud walker will skip the pud if it has the same value as
    the previous one . Skipping done iff we search for W+X mappings,
    so this optimization won't affect the page table dump via debugfs.
    
    This dropped time spend in W+X check from ~30 sec to reasonable 0.1 sec:
    
    Before:
    [    4.579991] Freeing unused kernel memory: 1000K
    [   35.257523] x86/mm: Checked W+X mappings: passed, no W+X pages found.
    
    After:
    [    5.138756] Freeing unused kernel memory: 1000K
    [    5.266496] x86/mm: Checked W+X mappings: passed, no W+X pages found.
    
    Signed-off-by: default avatarAndrey Ryabinin <aryabinin@virtuozzo.com>
    Reviewed-by: default avatarAlexander Potapenko <glider@google.com>
    Cc: Mark Rutland <mark.rutland@arm.com>
    Cc: kasan-dev@googlegroups.com
    Cc: Tobias Regnery <tobias.regnery@gmail.com>
    Cc: Dmitry Vyukov <dvyukov@google.com>
    Link: http://lkml.kernel.org/r/20170214100839.17186-1-aryabinin@virtuozzo.com
    
    
    Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
    243b72aa