Kconfig.ubsan 3.2 KB
Newer Older
1
# SPDX-License-Identifier: GPL-2.0-only
2 3 4
config ARCH_HAS_UBSAN_SANITIZE_ALL
	bool

5
menuconfig UBSAN
6 7
	bool "Undefined behaviour sanity checker"
	help
8
	  This option enables the Undefined Behaviour sanity checker.
9
	  Compile-time instrumentation is used to detect various undefined
10 11 12
	  behaviours at runtime. For more details, see:
	  Documentation/dev-tools/ubsan.rst

13 14
if UBSAN

15 16 17 18 19 20 21 22 23 24 25 26 27
config UBSAN_TRAP
	bool "On Sanitizer warnings, abort the running kernel code"
	depends on $(cc-option, -fsanitize-undefined-trap-on-error)
	help
	  Building kernels with Sanitizer features enabled tends to grow
	  the kernel size by around 5%, due to adding all the debugging
	  text on failure paths. To avoid this, Sanitizer instrumentation
	  can just issue a trap. This reduces the kernel size overhead but
	  turns all warnings (including potentially harmless conditions)
	  into full exceptions that abort the running kernel code
	  (regardless of context, locks held, etc), which may destabilize
	  the system. For some system builders this is an acceptable
	  trade-off.
28

29 30 31 32 33 34 35 36 37 38
config UBSAN_KCOV_BROKEN
	def_bool KCOV && CC_HAS_SANCOV_TRACE_PC
	depends on CC_IS_CLANG
	depends on !$(cc-option,-Werror=unused-command-line-argument -fsanitize=bounds -fsanitize-coverage=trace-pc)
	help
	  Some versions of clang support either UBSAN or KCOV but not the
	  combination of the two.
	  See https://bugs.llvm.org/show_bug.cgi?id=45831 for the status
	  in newer releases.

39 40 41
config UBSAN_BOUNDS
	bool "Perform array index bounds checking"
	default UBSAN
42
	depends on !UBSAN_KCOV_BROKEN
43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
	help
	  This option enables detection of directly indexed out of bounds
	  array accesses, where the array size is known at compile time.
	  Note that this does not protect array overflows via bad calls
	  to the {str,mem}*cpy() family of functions (that is addressed
	  by CONFIG_FORTIFY_SOURCE).

config UBSAN_MISC
	bool "Enable all other Undefined Behavior sanity checks"
	default UBSAN
	help
	  This option enables all sanity checks that don't have their
	  own Kconfig options. Disable this if you only want to have
	  individually selected checks.

58 59 60
config UBSAN_SANITIZE_ALL
	bool "Enable instrumentation for the entire kernel"
	depends on ARCH_HAS_UBSAN_SANITIZE_ALL
61 62 63 64 65

	# We build with -Wno-maybe-uninitilzed, but we still want to
	# use -Wmaybe-uninitilized in allmodconfig builds.
	# So dependsy bellow used to disable this option in allmodconfig
	depends on !COMPILE_TEST
66 67 68 69 70
	default y
	help
	  This option activates instrumentation for the entire kernel.
	  If you don't enable this option, you have to explicitly specify
	  UBSAN_SANITIZE := y for the files/directories you want to check for UB.
Y
Yang Shi 已提交
71 72
	  Enabling this option will get kernel image size increased
	  significantly.
73

74 75 76
config UBSAN_ALIGNMENT
	bool "Enable checks for pointers alignment"
	default !HAVE_EFFICIENT_UNALIGNED_ACCESS
77
	depends on !UBSAN_TRAP
78
	help
79 80
	  This option enables the check of unaligned memory accesses.
	  Enabling this option on architectures that support unaligned
81
	  accesses may produce a lot of false positives.
82

J
Jinbum Park 已提交
83 84
config TEST_UBSAN
	tristate "Module for testing for undefined behavior detection"
85
	depends on m
J
Jinbum Park 已提交
86 87 88
	help
	  This is a test module for UBSAN.
	  It triggers various undefined behavior, and detect it.
89 90

endif	# if UBSAN