• Christophe Leroy's avatar
    lkdtm/bugs: Don't expect thread termination without CONFIG_UBSAN_TRAP · 8bfdbddd
    Christophe Leroy authored
    When you don't select CONFIG_UBSAN_TRAP, you get:
    
      # echo ARRAY_BOUNDS > /sys/kernel/debug/provoke-crash/DIRECT
    [  102.265827] ================================================================================
    [  102.278433] UBSAN: array-index-out-of-bounds in drivers/misc/lkdtm/bugs.c:342:16
    [  102.287207] index 8 is out of range for type 'char [8]'
    [  102.298722] ================================================================================
    [  102.313712] lkdtm: FAIL: survived array bounds overflow!
    [  102.318770] lkdtm: Unexpected! This kernel (5.16.0-rc1-s3k-dev-01884-g720dcf79314a ppc) was built with CONFIG_UBSAN_BOUNDS=y
    
    It is not correct because when CONFIG_UBSAN_TRAP is not selected
    you can't expect array bounds overflow to kill the thread.
    
    Modify the logic so that when the kernel is built with
    CONFIG_UBSAN_BOUNDS but without CONFIG_UBSAN_TRAP, you get a warning
    about CONFIG_UBSAN_TRAP not been selected instead.
    
    This also require a fix of pr_expected_config(), otherwise the
    following error is encountered.
    
      CC      drivers/misc/lkdtm/bugs.o
    drivers/misc/lkdtm/bugs.c: In function 'lkdtm_ARRAY_BOUNDS':
    drivers/misc/lkdtm/bugs.c:351:2: error: 'else' without a previous 'if'
      351 |  else
          |  ^~~~
    
    Fixes: c75be56e ("lkdtm/bugs: Add ARRAY_BOUNDS to selftests")
    Signed-off-by: default avatarChristophe Leroy <christophe.leroy@csgroup.eu>
    Signed-off-by: default avatarKees Cook <keescook@chromium.org>
    Link: https://lore.kernel.org/r/363b58690e907c677252467a94fe49444c80ea76.1649704381.git.christophe.leroy@csgroup.eu
    8bfdbddd
lkdtm.h 5.25 KB