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"
 
 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
        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.
 
          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
 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.
        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).
 
          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
 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 !UBSAN_KCOV_BROKEN
+       depends on $(cc-option,-fsanitize=local-bounds)
        help
          This option enables -fsanitize=local-bounds which traps when an
        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
          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.
 
          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
 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
        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
        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
        help
          This option enables the check of unaligned memory accesses.
          Enabling this option on architectures that support unaligned