Merge tag 'x86-mm-2020-10-12' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
[linux-2.6-microblaze.git] / lib / Kconfig.kasan
index 34b84bc..047b53d 100644 (file)
@@ -18,7 +18,7 @@ config CC_HAS_KASAN_SW_TAGS
 config CC_HAS_WORKING_NOSANITIZE_ADDRESS
        def_bool !CC_IS_GCC || GCC_VERSION >= 80300
 
-config KASAN
+menuconfig KASAN
        bool "KASAN: runtime memory debugger"
        depends on (HAVE_ARCH_KASAN && CC_HAS_KASAN_GENERIC) || \
                   (HAVE_ARCH_KASAN_SW_TAGS && CC_HAS_KASAN_SW_TAGS)
@@ -29,9 +29,10 @@ config KASAN
          designed to find out-of-bounds accesses and use-after-free bugs.
          See Documentation/dev-tools/kasan.rst for details.
 
+if KASAN
+
 choice
        prompt "KASAN mode"
-       depends on KASAN
        default KASAN_GENERIC
        help
          KASAN has two modes: generic KASAN (similar to userspace ASan,
@@ -39,6 +40,7 @@ choice
          software tag-based KASAN (a version based on software memory
          tagging, arm64 only, similar to userspace HWASan, enabled with
          CONFIG_KASAN_SW_TAGS).
+
          Both generic and tag-based KASAN are strictly debugging features.
 
 config KASAN_GENERIC
@@ -50,16 +52,18 @@ config KASAN_GENERIC
        select STACKDEPOT
        help
          Enables generic KASAN mode.
-         Supported in both GCC and Clang. With GCC it requires version 4.9.2
-         or later for basic support and version 5.0 or later for detection of
-         out-of-bounds accesses for stack and global variables and for inline
-         instrumentation mode (CONFIG_KASAN_INLINE). With Clang it requires
-         version 3.7.0 or later and it doesn't support detection of
-         out-of-bounds accesses for global variables yet.
+
+         This mode is supported in both GCC and Clang. With GCC it requires
+         version 8.3.0 or later. With Clang it requires version 7.0.0 or
+         later, but detection of out-of-bounds accesses for global variables
+         is supported only since Clang 11.
+
          This mode consumes about 1/8th of available memory at kernel start
          and introduces an overhead of ~x1.5 for the rest of the allocations.
          The performance slowdown is ~x3.
+
          For better error detection enable CONFIG_STACKTRACE.
+
          Currently CONFIG_KASAN_GENERIC doesn't work with CONFIG_DEBUG_SLAB
          (the resulting kernel does not boot).
 
@@ -72,15 +76,19 @@ config KASAN_SW_TAGS
        select STACKDEPOT
        help
          Enables software tag-based KASAN mode.
+
          This mode requires Top Byte Ignore support by the CPU and therefore
-         is only supported for arm64.
-         This mode requires Clang version 7.0.0 or later.
+         is only supported for arm64. This mode requires Clang version 7.0.0
+         or later.
+
          This mode consumes about 1/16th of available memory at kernel start
          and introduces an overhead of ~20% for the rest of the allocations.
          This mode may potentially introduce problems relating to pointer
          casting and comparison, as it embeds tags into the top byte of each
          pointer.
+
          For better error detection enable CONFIG_STACKTRACE.
+
          Currently CONFIG_KASAN_SW_TAGS doesn't work with CONFIG_DEBUG_SLAB
          (the resulting kernel does not boot).
 
@@ -88,7 +96,6 @@ endchoice
 
 choice
        prompt "Instrumentation type"
-       depends on KASAN
        default KASAN_OUTLINE
 
 config KASAN_OUTLINE
@@ -107,13 +114,11 @@ config KASAN_INLINE
          memory accesses. This is faster than outline (in some workloads
          it gives about x2 boost over outline instrumentation), but
          make kernel's .text size much bigger.
-         For CONFIG_KASAN_GENERIC this requires GCC 5.0 or later.
 
 endchoice
 
 config KASAN_STACK_ENABLE
        bool "Enable stack instrumentation (unsafe)" if CC_IS_CLANG && !COMPILE_TEST
-       depends on KASAN
        help
          The LLVM stack address sanitizer has a know problem that
          causes excessive stack usage in a lot of functions, see
@@ -134,7 +139,7 @@ config KASAN_STACK
 
 config KASAN_S390_4_LEVEL_PAGING
        bool "KASan: use 4-level paging"
-       depends on KASAN && S390
+       depends on S390
        help
          Compiling the kernel with KASan disables automatic 3-level vs
          4-level paging selection. 3-level paging is used by default (up
@@ -151,7 +156,7 @@ config KASAN_SW_TAGS_IDENTIFY
 
 config KASAN_VMALLOC
        bool "Back mappings in vmalloc space with real shadow memory"
-       depends on KASAN && HAVE_ARCH_KASAN_VMALLOC
+       depends on HAVE_ARCH_KASAN_VMALLOC
        help
          By default, the shadow region for vmalloc space is the read-only
          zero page. This means that KASAN cannot detect errors involving
@@ -164,8 +169,10 @@ config KASAN_VMALLOC
 
 config TEST_KASAN
        tristate "Module for testing KASAN for bug detection"
-       depends on m && KASAN
+       depends on m
        help
          This is a test module doing various nasty things like
          out of bounds accesses, use after free. It is useful for testing
          kernel debugging features like KASAN.
+
+endif # KASAN