ubsan: disable UBSAN_TRAP for all*config
[linux-2.6-microblaze.git] / lib / Kconfig.ubsan
index 58f8d03..6e8b67d 100644 (file)
@@ -14,6 +14,7 @@ if UBSAN
 
 config UBSAN_TRAP
        bool "On Sanitizer warnings, abort the running kernel code"
+       depends on !COMPILE_TEST
        depends on $(cc-option, -fsanitize-undefined-trap-on-error)
        help
          Building kernels with Sanitizer features enabled tends to grow
@@ -36,10 +37,17 @@ config UBSAN_KCOV_BROKEN
          See https://bugs.llvm.org/show_bug.cgi?id=45831 for the status
          in newer releases.
 
+config CC_HAS_UBSAN_BOUNDS
+       def_bool $(cc-option,-fsanitize=bounds)
+
+config CC_HAS_UBSAN_ARRAY_BOUNDS
+       def_bool $(cc-option,-fsanitize=array-bounds)
+
 config UBSAN_BOUNDS
        bool "Perform array index bounds checking"
        default UBSAN
        depends on !UBSAN_KCOV_BROKEN
+       depends on CC_HAS_UBSAN_ARRAY_BOUNDS || CC_HAS_UBSAN_BOUNDS
        help
          This option enables detection of directly indexed out of bounds
          array accesses, where the array size is known at compile time.
@@ -47,15 +55,30 @@ config UBSAN_BOUNDS
          to the {str,mem}*cpy() family of functions (that is addressed
          by CONFIG_FORTIFY_SOURCE).
 
+config UBSAN_ONLY_BOUNDS
+       def_bool CC_HAS_UBSAN_BOUNDS && !CC_HAS_UBSAN_ARRAY_BOUNDS
+       depends on UBSAN_BOUNDS
+       help
+         This is a weird case: Clang's -fsanitize=bounds includes
+         -fsanitize=local-bounds, but it's trapping-only, so for
+         Clang, we must use -fsanitize=array-bounds when we want
+         traditional array bounds checking enabled. For GCC, we
+         want -fsanitize=bounds.
+
+config UBSAN_ARRAY_BOUNDS
+       def_bool CC_HAS_UBSAN_ARRAY_BOUNDS
+       depends on UBSAN_BOUNDS
+
 config UBSAN_LOCAL_BOUNDS
        bool "Perform array local bounds checking"
        depends on UBSAN_TRAP
-       depends on CC_IS_CLANG
        depends on !UBSAN_KCOV_BROKEN
+       depends on $(cc-option,-fsanitize=local-bounds)
        help
          This option enables -fsanitize=local-bounds which traps when an
-         exception/error is detected. Therefore, it should be enabled only
-         if trapping is expected.
+         exception/error is detected. Therefore, it may only be enabled
+         with CONFIG_UBSAN_TRAP.
+
          Enabling this option detects errors due to accesses through a
          pointer that is derived from an object of a statically-known size,
          where an added offset (which may not be known statically) is
@@ -69,13 +92,44 @@ config UBSAN_MISC
          own Kconfig options. Disable this if you only want to have
          individually selected checks.
 
+config UBSAN_SHIFT
+       def_bool UBSAN_MISC
+       depends on $(cc-option,-fsanitize=shift)
+
+config UBSAN_DIV_ZERO
+       def_bool UBSAN_MISC
+       depends on $(cc-option,-fsanitize=integer-divide-by-zero)
+
+config UBSAN_UNREACHABLE
+       def_bool UBSAN_MISC
+       depends on $(cc-option,-fsanitize=unreachable)
+
+config UBSAN_SIGNED_OVERFLOW
+       def_bool UBSAN_MISC
+       depends on $(cc-option,-fsanitize=signed-integer-overflow)
+
+config UBSAN_UNSIGNED_OVERFLOW
+       def_bool UBSAN_MISC
+       depends on $(cc-option,-fsanitize=unsigned-integer-overflow)
+
+config UBSAN_OBJECT_SIZE
+       def_bool UBSAN_MISC
+       # gcc hugely expands stack usage with -fsanitize=object-size
+       # https://lore.kernel.org/lkml/CAHk-=wjPasyJrDuwDnpHJS2TuQfExwe=px-SzLeN8GFMAQJPmQ@mail.gmail.com/
+       depends on !CC_IS_GCC
+       depends on $(cc-option,-fsanitize=object-size)
+
+config UBSAN_BOOL
+       def_bool UBSAN_MISC
+       depends on $(cc-option,-fsanitize=bool)
+
+config UBSAN_ENUM
+       def_bool UBSAN_MISC
+       depends on $(cc-option,-fsanitize=enum)
+
 config UBSAN_SANITIZE_ALL
        bool "Enable instrumentation for the entire kernel"
        depends on ARCH_HAS_UBSAN_SANITIZE_ALL
-
-       # 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
        default y
        help
@@ -89,6 +143,7 @@ config UBSAN_ALIGNMENT
        bool "Enable checks for pointers alignment"
        default !HAVE_EFFICIENT_UNALIGNED_ACCESS
        depends on !UBSAN_TRAP
+       depends on $(cc-option,-fsanitize=alignment)
        help
          This option enables the check of unaligned memory accesses.
          Enabling this option on architectures that support unaligned