3
0
mirror of https://github.com/Qortal/Brooklyn.git synced 2025-01-30 14:52:17 +00:00
Brooklyn/lib/Kconfig.kasan

202 lines
6.3 KiB
Plaintext
Raw Normal View History

2022-04-02 13:24:21 +00:00
# SPDX-License-Identifier: GPL-2.0-only
2022-12-14 06:30:32 +00:00
2022-04-02 13:24:21 +00:00
# This config refers to the generic KASAN mode.
config HAVE_ARCH_KASAN
bool
config HAVE_ARCH_KASAN_SW_TAGS
bool
config HAVE_ARCH_KASAN_HW_TAGS
bool
config HAVE_ARCH_KASAN_VMALLOC
bool
config ARCH_DISABLE_KASAN_INLINE
bool
help
2022-12-14 06:30:32 +00:00
Disables both inline and stack instrumentation. Selected by
architectures that do not support these instrumentation types.
2022-04-02 13:24:21 +00:00
config CC_HAS_KASAN_GENERIC
def_bool $(cc-option, -fsanitize=kernel-address)
config CC_HAS_KASAN_SW_TAGS
def_bool $(cc-option, -fsanitize=kernel-hwaddress)
# This option is only required for software KASAN modes.
2022-12-14 06:30:32 +00:00
# Old GCC versions do not have proper support for no_sanitize_address.
2022-04-02 13:24:21 +00:00
# See https://gcc.gnu.org/bugzilla/show_bug.cgi?id=89124 for details.
config CC_HAS_WORKING_NOSANITIZE_ADDRESS
def_bool !CC_IS_GCC || GCC_VERSION >= 80300
menuconfig KASAN
2022-12-14 06:30:32 +00:00
bool "KASAN: dynamic memory safety error detector"
2022-04-02 13:24:21 +00:00
depends on (((HAVE_ARCH_KASAN && CC_HAS_KASAN_GENERIC) || \
(HAVE_ARCH_KASAN_SW_TAGS && CC_HAS_KASAN_SW_TAGS)) && \
CC_HAS_WORKING_NOSANITIZE_ADDRESS) || \
HAVE_ARCH_KASAN_HW_TAGS
depends on (SLUB && SYSFS) || (SLAB && !DEBUG_SLAB)
select STACKDEPOT_ALWAYS_INIT
help
2022-12-14 06:30:32 +00:00
Enables KASAN (Kernel Address Sanitizer) - a dynamic memory safety
error detector designed to find out-of-bounds and use-after-free bugs.
2022-04-02 13:24:21 +00:00
See Documentation/dev-tools/kasan.rst for details.
2022-12-14 06:30:32 +00:00
For better error reports, also enable CONFIG_STACKTRACE.
2022-04-02 13:24:21 +00:00
if KASAN
choice
prompt "KASAN mode"
default KASAN_GENERIC
help
KASAN has three modes:
2022-12-14 06:30:32 +00:00
1. Generic KASAN (supported by many architectures, enabled with
CONFIG_KASAN_GENERIC, similar to userspace ASan),
2. Software Tag-Based KASAN (arm64 only, based on software memory
tagging, enabled with CONFIG_KASAN_SW_TAGS, similar to userspace
HWASan), and
3. Hardware Tag-Based KASAN (arm64 only, based on hardware memory
tagging, enabled with CONFIG_KASAN_HW_TAGS).
2022-04-02 13:24:21 +00:00
2022-12-14 06:30:32 +00:00
See Documentation/dev-tools/kasan.rst for details about each mode.
2022-04-02 13:24:21 +00:00
config KASAN_GENERIC
2022-12-14 06:30:32 +00:00
bool "Generic KASAN"
2022-04-02 13:24:21 +00:00
depends on HAVE_ARCH_KASAN && CC_HAS_KASAN_GENERIC
depends on CC_HAS_WORKING_NOSANITIZE_ADDRESS
select SLUB_DEBUG if SLUB
select CONSTRUCTORS
help
2022-12-14 06:30:32 +00:00
Enables Generic KASAN.
2022-04-02 13:24:21 +00:00
2022-12-14 06:30:32 +00:00
Requires GCC 8.3.0+ or Clang.
2022-04-02 13:24:21 +00:00
2022-12-14 06:30:32 +00:00
Consumes about 1/8th of available memory at kernel start and adds an
overhead of ~50% for dynamic allocations.
2022-04-02 13:24:21 +00:00
The performance slowdown is ~x3.
2022-12-14 06:30:32 +00:00
(Incompatible with CONFIG_DEBUG_SLAB: the kernel does not boot.)
2022-04-02 13:24:21 +00:00
config KASAN_SW_TAGS
2022-12-14 06:30:32 +00:00
bool "Software Tag-Based KASAN"
2022-04-02 13:24:21 +00:00
depends on HAVE_ARCH_KASAN_SW_TAGS && CC_HAS_KASAN_SW_TAGS
depends on CC_HAS_WORKING_NOSANITIZE_ADDRESS
select SLUB_DEBUG if SLUB
select CONSTRUCTORS
help
2022-12-14 06:30:32 +00:00
Enables Software Tag-Based KASAN.
2022-04-02 13:24:21 +00:00
2022-12-14 06:30:32 +00:00
Requires GCC 11+ or Clang.
2022-04-02 13:24:21 +00:00
2022-12-14 06:30:32 +00:00
Supported only on arm64 CPUs and relies on Top Byte Ignore.
2022-04-02 13:24:21 +00:00
2022-12-14 06:30:32 +00:00
Consumes about 1/16th of available memory at kernel start and
add an overhead of ~20% for dynamic allocations.
2022-04-02 13:24:21 +00:00
2022-12-14 06:30:32 +00:00
May potentially introduce problems related to pointer casting and
comparison, as it embeds a tag into the top byte of each pointer.
(Incompatible with CONFIG_DEBUG_SLAB: the kernel does not boot.)
2022-04-02 13:24:21 +00:00
config KASAN_HW_TAGS
2022-12-14 06:30:32 +00:00
bool "Hardware Tag-Based KASAN"
2022-04-02 13:24:21 +00:00
depends on HAVE_ARCH_KASAN_HW_TAGS
depends on SLUB
help
2022-12-14 06:30:32 +00:00
Enables Hardware Tag-Based KASAN.
Requires GCC 10+ or Clang 12+.
Supported only on arm64 CPUs starting from ARMv8.5 and relies on
Memory Tagging Extension and Top Byte Ignore.
2022-04-02 13:24:21 +00:00
2022-12-14 06:30:32 +00:00
Consumes about 1/32nd of available memory.
2022-04-02 13:24:21 +00:00
2022-12-14 06:30:32 +00:00
May potentially introduce problems related to pointer casting and
comparison, as it embeds a tag into the top byte of each pointer.
2022-04-02 13:24:21 +00:00
endchoice
choice
prompt "Instrumentation type"
depends on KASAN_GENERIC || KASAN_SW_TAGS
default KASAN_OUTLINE
config KASAN_OUTLINE
bool "Outline instrumentation"
help
2022-12-14 06:30:32 +00:00
Makes the compiler insert function calls that check whether the memory
is accessible before each memory access. Slower than KASAN_INLINE, but
does not bloat the size of the kernel's .text section so much.
2022-04-02 13:24:21 +00:00
config KASAN_INLINE
bool "Inline instrumentation"
depends on !ARCH_DISABLE_KASAN_INLINE
help
2022-12-14 06:30:32 +00:00
Makes the compiler directly insert memory accessibility checks before
each memory access. Faster than KASAN_OUTLINE (gives ~x2 boost for
some workloads), but makes the kernel's .text size much bigger.
2022-04-02 13:24:21 +00:00
endchoice
config KASAN_STACK
2022-12-14 06:30:32 +00:00
bool "Stack instrumentation (unsafe)" if CC_IS_CLANG && !COMPILE_TEST
2022-04-02 13:24:21 +00:00
depends on KASAN_GENERIC || KASAN_SW_TAGS
depends on !ARCH_DISABLE_KASAN_INLINE
default y if CC_IS_GCC
help
2022-12-14 06:30:32 +00:00
Disables stack instrumentation and thus KASAN's ability to detect
out-of-bounds bugs in stack variables.
With Clang, stack instrumentation has a problem that causes excessive
stack usage, see https://bugs.llvm.org/show_bug.cgi?id=38809. Thus,
with Clang, this option is deemed unsafe.
This option is always disabled when compile-testing with Clang to
avoid cluttering the log with stack overflow warnings.
With GCC, enabling stack instrumentation is assumed to be safe.
If the architecture disables inline instrumentation via
ARCH_DISABLE_KASAN_INLINE, stack instrumentation gets disabled
as well, as it adds inline-style instrumentation that is run
unconditionally.
2022-04-02 13:24:21 +00:00
config KASAN_VMALLOC
bool "Check accesses to vmalloc allocations"
depends on HAVE_ARCH_KASAN_VMALLOC
2022-04-02 13:24:21 +00:00
help
2022-12-14 06:30:32 +00:00
Makes KASAN check the validity of accesses to vmalloc allocations.
2022-12-14 06:30:32 +00:00
With software KASAN modes, all types vmalloc allocations are
checked. Enabling this option leads to higher memory usage.
2022-12-14 06:30:32 +00:00
With Hardware Tag-Based KASAN, only non-executable VM_ALLOC mappings
are checked. There is no additional memory usage.
2022-04-02 13:24:21 +00:00
config KASAN_KUNIT_TEST
tristate "KUnit-compatible tests of KASAN bug detection capabilities" if !KUNIT_ALL_TESTS
depends on KASAN && KUNIT
default KUNIT_ALL_TESTS
help
2022-12-14 06:30:32 +00:00
A KUnit-based KASAN test suite. Triggers different kinds of
out-of-bounds and use-after-free accesses. Useful for testing whether
KASAN can detect certain bug types.
2022-04-02 13:24:21 +00:00
For more information on KUnit and unit tests in general, please refer
2022-12-14 06:30:32 +00:00
to the KUnit documentation in Documentation/dev-tools/kunit/.
2022-04-02 13:24:21 +00:00
config KASAN_MODULE_TEST
tristate "KUnit-incompatible tests of KASAN bug detection capabilities"
depends on m && KASAN && !KASAN_HW_TAGS
help
2022-12-14 06:30:32 +00:00
A part of the KASAN test suite that is not integrated with KUnit.
Incompatible with Hardware Tag-Based KASAN.
2022-04-02 13:24:21 +00:00
endif # KASAN