Thomas Gleixner | ec8f24b | 2019-05-19 13:07:45 +0100 | [diff] [blame] | 1 | # SPDX-License-Identifier: GPL-2.0-only |
Andrey Ryabinin | c6d3085 | 2016-01-20 15:00:55 -0800 | [diff] [blame] | 2 | config ARCH_HAS_UBSAN_SANITIZE_ALL |
| 3 | bool |
| 4 | |
Kees Cook | 277a108 | 2020-04-06 20:12:31 -0700 | [diff] [blame] | 5 | menuconfig UBSAN |
Andrey Ryabinin | c6d3085 | 2016-01-20 15:00:55 -0800 | [diff] [blame] | 6 | bool "Undefined behaviour sanity checker" |
| 7 | help |
Kees Cook | 0887a7e | 2020-04-06 20:12:27 -0700 | [diff] [blame] | 8 | This option enables the Undefined Behaviour sanity checker. |
Andrey Ryabinin | c6d3085 | 2016-01-20 15:00:55 -0800 | [diff] [blame] | 9 | Compile-time instrumentation is used to detect various undefined |
Kees Cook | 0887a7e | 2020-04-06 20:12:27 -0700 | [diff] [blame] | 10 | behaviours at runtime. For more details, see: |
| 11 | Documentation/dev-tools/ubsan.rst |
| 12 | |
Kees Cook | 277a108 | 2020-04-06 20:12:31 -0700 | [diff] [blame] | 13 | if UBSAN |
| 14 | |
Kees Cook | 0887a7e | 2020-04-06 20:12:27 -0700 | [diff] [blame] | 15 | config UBSAN_TRAP |
| 16 | bool "On Sanitizer warnings, abort the running kernel code" |
Kees Cook | 0887a7e | 2020-04-06 20:12:27 -0700 | [diff] [blame] | 17 | depends on $(cc-option, -fsanitize-undefined-trap-on-error) |
| 18 | help |
| 19 | Building kernels with Sanitizer features enabled tends to grow |
| 20 | the kernel size by around 5%, due to adding all the debugging |
| 21 | text on failure paths. To avoid this, Sanitizer instrumentation |
| 22 | can just issue a trap. This reduces the kernel size overhead but |
| 23 | turns all warnings (including potentially harmless conditions) |
| 24 | into full exceptions that abort the running kernel code |
| 25 | (regardless of context, locks held, etc), which may destabilize |
| 26 | the system. For some system builders this is an acceptable |
| 27 | trade-off. |
Andrey Ryabinin | c6d3085 | 2016-01-20 15:00:55 -0800 | [diff] [blame] | 28 | |
Arnd Bergmann | ea91a1d | 2020-05-21 16:20:37 +0200 | [diff] [blame] | 29 | config UBSAN_KCOV_BROKEN |
| 30 | def_bool KCOV && CC_HAS_SANCOV_TRACE_PC |
| 31 | depends on CC_IS_CLANG |
| 32 | depends on !$(cc-option,-Werror=unused-command-line-argument -fsanitize=bounds -fsanitize-coverage=trace-pc) |
| 33 | help |
| 34 | Some versions of clang support either UBSAN or KCOV but not the |
| 35 | combination of the two. |
| 36 | See https://bugs.llvm.org/show_bug.cgi?id=45831 for the status |
| 37 | in newer releases. |
| 38 | |
Kees Cook | 277a108 | 2020-04-06 20:12:31 -0700 | [diff] [blame] | 39 | config UBSAN_BOUNDS |
| 40 | bool "Perform array index bounds checking" |
| 41 | default UBSAN |
Arnd Bergmann | ea91a1d | 2020-05-21 16:20:37 +0200 | [diff] [blame] | 42 | depends on !UBSAN_KCOV_BROKEN |
Kees Cook | 277a108 | 2020-04-06 20:12:31 -0700 | [diff] [blame] | 43 | help |
| 44 | This option enables detection of directly indexed out of bounds |
| 45 | array accesses, where the array size is known at compile time. |
| 46 | Note that this does not protect array overflows via bad calls |
| 47 | to the {str,mem}*cpy() family of functions (that is addressed |
| 48 | by CONFIG_FORTIFY_SOURCE). |
| 49 | |
George Popescu | 6a6155f | 2020-10-15 20:13:38 -0700 | [diff] [blame] | 50 | config UBSAN_LOCAL_BOUNDS |
| 51 | bool "Perform array local bounds checking" |
| 52 | depends on UBSAN_TRAP |
| 53 | depends on CC_IS_CLANG |
| 54 | depends on !UBSAN_KCOV_BROKEN |
| 55 | help |
| 56 | This option enables -fsanitize=local-bounds which traps when an |
| 57 | exception/error is detected. Therefore, it should be enabled only |
| 58 | if trapping is expected. |
| 59 | Enabling this option detects errors due to accesses through a |
| 60 | pointer that is derived from an object of a statically-known size, |
| 61 | where an added offset (which may not be known statically) is |
| 62 | out-of-bounds. |
| 63 | |
Kees Cook | 277a108 | 2020-04-06 20:12:31 -0700 | [diff] [blame] | 64 | config UBSAN_MISC |
| 65 | bool "Enable all other Undefined Behavior sanity checks" |
| 66 | default UBSAN |
| 67 | help |
| 68 | This option enables all sanity checks that don't have their |
| 69 | own Kconfig options. Disable this if you only want to have |
| 70 | individually selected checks. |
| 71 | |
Andrey Ryabinin | c6d3085 | 2016-01-20 15:00:55 -0800 | [diff] [blame] | 72 | config UBSAN_SANITIZE_ALL |
| 73 | bool "Enable instrumentation for the entire kernel" |
Andrey Ryabinin | c6d3085 | 2016-01-20 15:00:55 -0800 | [diff] [blame] | 74 | depends on ARCH_HAS_UBSAN_SANITIZE_ALL |
Andrey Ryabinin | dde5cf3 | 2016-03-22 14:27:45 -0700 | [diff] [blame] | 75 | |
| 76 | # We build with -Wno-maybe-uninitilzed, but we still want to |
| 77 | # use -Wmaybe-uninitilized in allmodconfig builds. |
| 78 | # So dependsy bellow used to disable this option in allmodconfig |
| 79 | depends on !COMPILE_TEST |
Andrey Ryabinin | c6d3085 | 2016-01-20 15:00:55 -0800 | [diff] [blame] | 80 | default y |
| 81 | help |
| 82 | This option activates instrumentation for the entire kernel. |
| 83 | If you don't enable this option, you have to explicitly specify |
| 84 | UBSAN_SANITIZE := y for the files/directories you want to check for UB. |
Yang Shi | 7707535 | 2016-02-11 16:12:55 -0800 | [diff] [blame] | 85 | Enabling this option will get kernel image size increased |
| 86 | significantly. |
Andrey Ryabinin | c6d3085 | 2016-01-20 15:00:55 -0800 | [diff] [blame] | 87 | |
Anders Roxell | 1a6a1db | 2019-03-07 16:30:16 -0800 | [diff] [blame] | 88 | config UBSAN_ALIGNMENT |
Kees Cook | 8d58f22 | 2020-05-07 18:36:23 -0700 | [diff] [blame] | 89 | bool "Enable checks for pointers alignment" |
| 90 | default !HAVE_EFFICIENT_UNALIGNED_ACCESS |
Kees Cook | 9380ce246 | 2020-06-01 21:52:46 -0700 | [diff] [blame] | 91 | depends on !UBSAN_TRAP |
Kees Cook | 8d58f22 | 2020-05-07 18:36:23 -0700 | [diff] [blame] | 92 | help |
| 93 | This option enables the check of unaligned memory accesses. |
| 94 | Enabling this option on architectures that support unaligned |
| 95 | accesses may produce a lot of false positives. |
Anders Roxell | 1a6a1db | 2019-03-07 16:30:16 -0800 | [diff] [blame] | 96 | |
Jinbum Park | 854686f | 2018-04-10 16:32:58 -0700 | [diff] [blame] | 97 | config TEST_UBSAN |
| 98 | tristate "Module for testing for undefined behavior detection" |
Kees Cook | 277a108 | 2020-04-06 20:12:31 -0700 | [diff] [blame] | 99 | depends on m |
Jinbum Park | 854686f | 2018-04-10 16:32:58 -0700 | [diff] [blame] | 100 | help |
| 101 | This is a test module for UBSAN. |
| 102 | It triggers various undefined behavior, and detect it. |
Kees Cook | 277a108 | 2020-04-06 20:12:31 -0700 | [diff] [blame] | 103 | |
| 104 | endif # if UBSAN |