xref: /linux/lib/Kconfig.kmsan (revision bf80eef2212a1e8451df13b52533f4bc31bb4f8e)
1# SPDX-License-Identifier: GPL-2.0-only
2config HAVE_ARCH_KMSAN
3	bool
4
5config HAVE_KMSAN_COMPILER
6	# Clang versions <14.0.0 also support -fsanitize=kernel-memory, but not
7	# all the features necessary to build the kernel with KMSAN.
8	depends on CC_IS_CLANG && CLANG_VERSION >= 140000
9	def_bool $(cc-option,-fsanitize=kernel-memory -mllvm -msan-disable-checks=1)
10
11config KMSAN
12	bool "KMSAN: detector of uninitialized values use"
13	depends on HAVE_ARCH_KMSAN && HAVE_KMSAN_COMPILER
14	depends on SLUB && DEBUG_KERNEL && !KASAN && !KCSAN
15	select STACKDEPOT
16	select STACKDEPOT_ALWAYS_INIT
17	help
18	  KernelMemorySanitizer (KMSAN) is a dynamic detector of uses of
19	  uninitialized values in the kernel. It is based on compiler
20	  instrumentation provided by Clang and thus requires Clang to build.
21
22	  An important note is that KMSAN is not intended for production use,
23	  because it drastically increases kernel memory footprint and slows
24	  the whole system down.
25
26	  See <file:Documentation/dev-tools/kmsan.rst> for more details.
27
28if KMSAN
29
30config HAVE_KMSAN_PARAM_RETVAL
31	# -fsanitize-memory-param-retval is supported only by Clang >= 14.
32	depends on HAVE_KMSAN_COMPILER
33	def_bool $(cc-option,-fsanitize=kernel-memory -fsanitize-memory-param-retval)
34
35config KMSAN_CHECK_PARAM_RETVAL
36	bool "Check for uninitialized values passed to and returned from functions"
37	default y
38	depends on HAVE_KMSAN_PARAM_RETVAL
39	help
40	  If the compiler supports -fsanitize-memory-param-retval, KMSAN will
41	  eagerly check every function parameter passed by value and every
42	  function return value.
43
44	  Disabling KMSAN_CHECK_PARAM_RETVAL will result in tracking shadow for
45	  function parameters and return values across function borders. This
46	  is a more relaxed mode, but it generates more instrumentation code and
47	  may potentially report errors in corner cases when non-instrumented
48	  functions call instrumented ones.
49
50config KMSAN_KUNIT_TEST
51	tristate "KMSAN integration test suite" if !KUNIT_ALL_TESTS
52	default KUNIT_ALL_TESTS
53	depends on TRACEPOINTS && KUNIT
54	help
55	  Test suite for KMSAN, testing various error detection scenarios,
56	  and checking that reports are correctly output to console.
57
58	  Say Y here if you want the test to be built into the kernel and run
59	  during boot; say M if you want the test to build as a module; say N
60	  if you are unsure.
61
62endif
63