Skip to content
  • Kees Cook's avatar
    ubsan: add trap instrumentation option · 0887a7eb
    Kees Cook authored
    
    
    Patch series "ubsan: Split out bounds checker", v5.
    
    This splits out the bounds checker so it can be individually used.  This
    is enabled in Android and hopefully for syzbot.  Includes LKDTM tests for
    behavioral corner-cases (beyond just the bounds checker), and adjusts
    ubsan and kasan slightly for correct panic handling.
    
    This patch (of 6):
    
    The Undefined Behavior Sanitizer can operate in two modes: warning
    reporting mode via lib/ubsan.c handler calls, or trap mode, which uses
    __builtin_trap() as the handler.  Using lib/ubsan.c means the kernel image
    is about 5% larger (due to all the debugging text and reporting structures
    to capture details about the warning conditions).  Using the trap mode,
    the image size changes are much smaller, though at the loss of the
    "warning only" mode.
    
    In order to give greater flexibility to system builders that want minimal
    changes to image size and are prepared to deal with kernel code being
    aborted and potentially destabilizing the system, this introduces
    CONFIG_UBSAN_TRAP.  The resulting image sizes comparison:
    
       text    data     bss       dec       hex     filename
    19533663   6183037  18554956  44271656  2a38828 vmlinux.stock
    19991849   7618513  18874448  46484810  2c54d4a vmlinux.ubsan
    19712181   6284181  18366540  44362902  2a4ec96 vmlinux.ubsan-trap
    
    CONFIG_UBSAN=y:      image +4.8% (text +2.3%, data +18.9%)
    CONFIG_UBSAN_TRAP=y: image +0.2% (text +0.9%, data +1.6%)
    
    Additionally adjusts the CONFIG_UBSAN Kconfig help for clarity and removes
    the mention of non-existing boot param "ubsan_handle".
    
    Suggested-by: default avatarElena Petrova <lenaptr@google.com>
    Signed-off-by: default avatarKees Cook <keescook@chromium.org>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Acked-by: default avatarDmitry Vyukov <dvyukov@google.com>
    Cc: Andrey Ryabinin <aryabinin@virtuozzo.com>
    Cc: Andrey Konovalov <andreyknvl@google.com>
    Cc: Alexander Potapenko <glider@google.com>
    Cc: Dan Carpenter <dan.carpenter@oracle.com>
    Cc: "Gustavo A. R. Silva" <gustavo@embeddedor.com>
    Cc: Arnd Bergmann <arnd@arndb.de>
    Cc: Ard Biesheuvel <ard.biesheuvel@linaro.org>
    Link: http://lkml.kernel.org/r/20200227193516.32566-2-keescook@chromium.org
    
    
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    0887a7eb