• Qian Cai's avatar
    x86_64: increase stack size for KASAN_EXTRA · a8e911d1
    Qian Cai authored
    If the kernel is configured with KASAN_EXTRA, the stack size is
    increasted significantly because this option sets "-fstack-reuse" to
    "none" in GCC [1].  As a result, it triggers stack overrun quite often
    with 32k stack size compiled using GCC 8.  For example, this reproducer
    
      https://github.com/linux-test-project/ltp/blob/master/testcases/kernel/syscalls/madvise/madvise06.c
    
    triggers a "corrupted stack end detected inside scheduler" very reliably
    with CONFIG_SCHED_STACK_END_CHECK enabled.
    
    There are just too many functions that could have a large stack with
    KASAN_EXTRA due to large local variables that have been called over and
    over again without being able to reuse the stacks.  Some noticiable ones
    are
    
      size
      7648 shrink_page_list
      3584 xfs_rmap_convert
      3312 migrate_page_move_mapping
      3312 dev_ethtool
      3200 migrate_misplaced_transhuge_page
      3168 copy_process
    
    There are other 49 functions are over 2k in size while compiling kernel
    with "-Wframe-larger-than=" even with a related minimal config on this
    machine.  Hence, it is too much work to change Makefiles for each object
    to compile without "-fsanitize-address-use-after-scope" individually.
    
    [1] https://gcc.gnu.org/bugzilla/show_bug.cgi?id=81715#c23
    
    Although there is a patch in GCC 9 to help the situation, GCC 9 probably
    won't be released in a few months and then it probably take another
    6-month to 1-year for all major distros to include it as a default.
    Hence, the stack usage with KASAN_EXTRA can be revisited again in 2020
    when GCC 9 is everywhere.  Until then, this patch will help users avoid
    stack overrun.
    
    This has already been fixed for arm64 for the same reason via
    6e883067 ("arm64: kasan: Increase stack size for KASAN_EXTRA").
    
    Link: http://lkml.kernel.org/r/20190109215209.2903-1-cai@lca.pwSigned-off-by: default avatarQian Cai <cai@lca.pw>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: Ingo Molnar <mingo@redhat.com>
    Cc: Borislav Petkov <bp@alien8.de>
    Cc: "H. Peter Anvin" <hpa@zytor.com>
    Cc: Andrey Ryabinin <aryabinin@virtuozzo.com>
    Cc: Alexander Potapenko <glider@google.com>
    Cc: Dmitry Vyukov <dvyukov@google.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    a8e911d1
page_64_types.h 2.32 KB