config UBSAN
        bool "Undefined behaviour sanity checker"
        help
-         This option enables undefined behaviour sanity checker
+         This option enables the Undefined Behaviour sanity checker.
          Compile-time instrumentation is used to detect various undefined
-         behaviours in runtime. Various types of checks may be enabled
-         via boot parameter ubsan_handle
-         (see: Documentation/dev-tools/ubsan.rst).
+         behaviours at runtime. For more details, see:
+         Documentation/dev-tools/ubsan.rst
+
+config UBSAN_TRAP
+       bool "On Sanitizer warnings, abort the running kernel code"
+       depends on UBSAN
+       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.
 
 config UBSAN_SANITIZE_ALL
        bool "Enable instrumentation for the entire kernel"
 
 clean-files    += oid_registry_data.c
 
 obj-$(CONFIG_UCS2_STRING) += ucs2_string.o
+ifneq ($(CONFIG_UBSAN_TRAP),y)
 obj-$(CONFIG_UBSAN) += ubsan.o
+endif
 
 UBSAN_SANITIZE_ubsan.o := n
 KASAN_SANITIZE_ubsan.o := n
 
 # SPDX-License-Identifier: GPL-2.0
 ifdef CONFIG_UBSAN
+
+ifdef CONFIG_UBSAN_ALIGNMENT
+      CFLAGS_UBSAN += $(call cc-option, -fsanitize=alignment)
+endif
+
       CFLAGS_UBSAN += $(call cc-option, -fsanitize=shift)
       CFLAGS_UBSAN += $(call cc-option, -fsanitize=integer-divide-by-zero)
       CFLAGS_UBSAN += $(call cc-option, -fsanitize=unreachable)
       CFLAGS_UBSAN += $(call cc-option, -fsanitize=bool)
       CFLAGS_UBSAN += $(call cc-option, -fsanitize=enum)
 
-ifdef CONFIG_UBSAN_ALIGNMENT
-      CFLAGS_UBSAN += $(call cc-option, -fsanitize=alignment)
+ifdef CONFIG_UBSAN_TRAP
+      CFLAGS_UBSAN += $(call cc-option, -fsanitize-undefined-trap-on-error)
 endif
 
       # -fsanitize=* options makes GCC less smart than usual and