]>
Commit | Line | Data |
---|---|---|
ec8f24b7 | 1 | # SPDX-License-Identifier: GPL-2.0-only |
c6d30853 AR |
2 | config ARCH_HAS_UBSAN_SANITIZE_ALL |
3 | bool | |
4 | ||
277a1085 | 5 | menuconfig UBSAN |
c6d30853 AR |
6 | bool "Undefined behaviour sanity checker" |
7 | help | |
0887a7eb | 8 | This option enables the Undefined Behaviour sanity checker. |
c6d30853 | 9 | Compile-time instrumentation is used to detect various undefined |
0887a7eb KC |
10 | behaviours at runtime. For more details, see: |
11 | Documentation/dev-tools/ubsan.rst | |
12 | ||
277a1085 KC |
13 | if UBSAN |
14 | ||
0887a7eb KC |
15 | config UBSAN_TRAP |
16 | bool "On Sanitizer warnings, abort the running kernel code" | |
0887a7eb KC |
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. | |
c6d30853 | 28 | |
ea91a1d4 AB |
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 | ||
277a1085 KC |
39 | config UBSAN_BOUNDS |
40 | bool "Perform array index bounds checking" | |
41 | default UBSAN | |
ea91a1d4 | 42 | depends on !UBSAN_KCOV_BROKEN |
277a1085 KC |
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 | ||
6a6155f6 GP |
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 | ||
277a1085 KC |
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 | ||
c6d30853 AR |
72 | config UBSAN_SANITIZE_ALL |
73 | bool "Enable instrumentation for the entire kernel" | |
c6d30853 | 74 | depends on ARCH_HAS_UBSAN_SANITIZE_ALL |
dde5cf39 AR |
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 | |
c6d30853 AR |
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. | |
7707535a YS |
85 | Enabling this option will get kernel image size increased |
86 | significantly. | |
c6d30853 | 87 | |
8d58f222 KC |
88 | config UBSAN_ALIGNMENT |
89 | bool "Enable checks for pointers alignment" | |
90 | default !HAVE_EFFICIENT_UNALIGNED_ACCESS | |
9380ce24 | 91 | depends on !UBSAN_TRAP |
c6d30853 | 92 | help |
8d58f222 KC |
93 | This option enables the check of unaligned memory accesses. |
94 | Enabling this option on architectures that support unaligned | |
c6d30853 | 95 | accesses may produce a lot of false positives. |
725c4d22 | 96 | |
854686f4 JP |
97 | config TEST_UBSAN |
98 | tristate "Module for testing for undefined behavior detection" | |
277a1085 | 99 | depends on m |
854686f4 JP |
100 | help |
101 | This is a test module for UBSAN. | |
102 | It triggers various undefined behavior, and detect it. | |
277a1085 KC |
103 | |
104 | endif # if UBSAN |