• Arnd Bergmann's avatar
    kasan: turn off asan-stack for clang-8 and earlier · 6baec880
    Arnd Bergmann authored
    Building an arm64 allmodconfig kernel with clang results in over 140
    warnings about overly large stack frames, the worst ones being:
    
      drivers/gpu/drm/panel/panel-sitronix-st7789v.c:196:12: error: stack frame size of 20224 bytes in function 'st7789v_prepare'
      drivers/video/fbdev/omap2/omapfb/displays/panel-tpo-td028ttec1.c:196:12: error: stack frame size of 13120 bytes in function 'td028ttec1_panel_enable'
      drivers/usb/host/max3421-hcd.c:1395:1: error: stack frame size of 10048 bytes in function 'max3421_spi_thread'
      drivers/net/wan/slic_ds26522.c:209:12: error: stack frame size of 9664 bytes in function 'slic_ds26522_probe'
      drivers/crypto/ccp/ccp-ops.c:2434:5: error: stack frame size of 8832 bytes in function 'ccp_run_cmd'
      drivers/media/dvb-frontends/stv0367.c:1005:12: error: stack frame size of 7840 bytes in function 'stv0367ter_algo'
    
    None of these happen with gcc today, and almost all of these are the
    result of a single known issue in llvm.  Hopefully it will eventually
    get fixed with the clang-9 release.
    
    In the meantime, the best idea I have is to turn off asan-stack for
    clang-8 and earlier, so we can produce a kernel that is safe to run.
    
    I have posted three patches that address the frame overflow warnings
    that are not addressed by turning off asan-stack, so in combination with
    this change, we get much closer to a clean allmodconfig build, which in
    turn is necessary to do meaningful build regression testing.
    
    It is still possible to turn on the CONFIG_ASAN_STACK option on all
    versions of clang, and it's always enabled for gcc, but when
    CONFIG_COMPILE_TEST is set, the option remains invisible, so
    allmodconfig and randconfig builds (which are normally done with a
    forced CONFIG_COMPILE_TEST) will still result in a mostly clean build.
    
    Link: http://lkml.kernel.org/r/20190222222950.3997333-1-arnd@arndb.de
    Link: https://bugs.llvm.org/show_bug.cgi?id=38809Signed-off-by: 's avatarArnd Bergmann <arnd@arndb.de>
    Reviewed-by: 's avatarQian Cai <cai@lca.pw>
    Reviewed-by: 's avatarMark Brown <broonie@kernel.org>
    Acked-by: 's avatarAndrey Ryabinin <aryabinin@virtuozzo.com>
    Cc: Dmitry Vyukov <dvyukov@google.com>
    Cc: Nick Desaulniers <ndesaulniers@google.com>
    Cc: Kostya Serebryany <kcc@google.com>
    Cc: Andrey Konovalov <andreyknvl@google.com>
    Signed-off-by: 's avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: 's avatarLinus Torvalds <torvalds@linux-foundation.org>
    6baec880
Name
Last commit
Last update
..
basic Loading commit data...
coccinelle Loading commit data...
dtc Loading commit data...
gcc-plugins Loading commit data...
gdb Loading commit data...
genksyms Loading commit data...
kconfig Loading commit data...
ksymoops Loading commit data...
mod Loading commit data...
package Loading commit data...
selinux Loading commit data...
tracing Loading commit data...
.gitignore Loading commit data...
Kbuild.include Loading commit data...
Kconfig.include Loading commit data...
Lindent Loading commit data...
Makefile Loading commit data...
Makefile.asm-generic Loading commit data...
Makefile.build Loading commit data...
Makefile.clean Loading commit data...
Makefile.dtbinst Loading commit data...
Makefile.extrawarn Loading commit data...
Makefile.gcc-plugins Loading commit data...
Makefile.headersinst Loading commit data...
Makefile.host Loading commit data...
Makefile.kasan Loading commit data...
Makefile.kcov Loading commit data...
Makefile.lib Loading commit data...
Makefile.modbuiltin Loading commit data...
Makefile.modinst Loading commit data...
Makefile.modpost Loading commit data...
Makefile.modsign Loading commit data...
Makefile.ubsan Loading commit data...
adjust_autoksyms.sh Loading commit data...
asn1_compiler.c Loading commit data...
bin2c.c Loading commit data...
bloat-o-meter Loading commit data...
bootgraph.pl Loading commit data...
bpf_helpers_doc.py Loading commit data...
cc-can-link.sh Loading commit data...
check_extable.sh Loading commit data...
checkincludes.pl Loading commit data...
checkkconfigsymbols.py Loading commit data...
checkpatch.pl Loading commit data...
checkstack.pl Loading commit data...
checksyscalls.sh Loading commit data...
checkversion.pl Loading commit data...
clang-version.sh Loading commit data...
cleanfile Loading commit data...
cleanpatch Loading commit data...
coccicheck Loading commit data...
config Loading commit data...
conmakehash.c Loading commit data...
const_structs.checkpatch Loading commit data...
decode_stacktrace.sh Loading commit data...
decodecode Loading commit data...
depmod.sh Loading commit data...
diffconfig Loading commit data...
documentation-file-ref-check Loading commit data...
export_report.pl Loading commit data...
extract-cert.c Loading commit data...
extract-ikconfig Loading commit data...
extract-module-sig.pl Loading commit data...
extract-sys-certs.pl Loading commit data...
extract-vmlinux Loading commit data...
extract_xc3028.pl Loading commit data...
faddr2line Loading commit data...
file-size.sh Loading commit data...
find-unused-docs.sh Loading commit data...
gcc-goto.sh Loading commit data...
gcc-ld Loading commit data...
gcc-plugin.sh Loading commit data...
gcc-version.sh Loading commit data...
gcc-x86_32-has-stack-protector.sh Loading commit data...
gcc-x86_64-has-stack-protector.sh Loading commit data...
gen_compile_commands.py Loading commit data...
gen_ksymdeps.sh Loading commit data...
get_dvb_firmware Loading commit data...
get_maintainer.pl Loading commit data...
gfp-translate Loading commit data...
headerdep.pl Loading commit data...
headers.sh Loading commit data...
headers_check.pl Loading commit data...
headers_install.sh Loading commit data...
insert-sys-cert.c Loading commit data...
kallsyms.c Loading commit data...
kernel-doc Loading commit data...
ld-version.sh Loading commit data...
leaking_addresses.pl Loading commit data...
link-vmlinux.sh Loading commit data...
makelst Loading commit data...
markup_oops.pl Loading commit data...
mkcompile_h Loading commit data...
mkmakefile Loading commit data...
mksysmap Loading commit data...
mkuboot.sh Loading commit data...
module-common.lds Loading commit data...
namespace.pl Loading commit data...
objdiff Loading commit data...
parse-maintainers.pl Loading commit data...
patch-kernel Loading commit data...
pnmtologo.c Loading commit data...
profile2linkerlist.pl Loading commit data...
prune-kernel Loading commit data...
recordmcount.c Loading commit data...
recordmcount.h Loading commit data...
recordmcount.pl Loading commit data...
setlocalversion Loading commit data...
show_delta Loading commit data...
sign-file.c Loading commit data...
sortextable.c Loading commit data...
sortextable.h Loading commit data...
spdxcheck-test.sh Loading commit data...
spdxcheck.py Loading commit data...
spelling.txt Loading commit data...
sphinx-pre-install Loading commit data...
split-man.pl Loading commit data...
stackdelta Loading commit data...
stackusage Loading commit data...
subarch.include Loading commit data...
tags.sh Loading commit data...
unifdef.c Loading commit data...
ver_linux Loading commit data...
xen-hypercalls.sh Loading commit data...
xz_wrap.sh Loading commit data...