68 строки
2.5 KiB
Plaintext
68 строки
2.5 KiB
Plaintext
|
# SPDX-License-Identifier: GPL-2.0-only
|
||
|
|
||
|
config HAVE_ARCH_KFENCE
|
||
|
bool
|
||
|
|
||
|
menuconfig KFENCE
|
||
|
bool "KFENCE: low-overhead sampling-based memory safety error detector"
|
||
|
depends on HAVE_ARCH_KFENCE && !KASAN && (SLAB || SLUB)
|
||
|
select STACKTRACE
|
||
|
help
|
||
|
KFENCE is a low-overhead sampling-based detector of heap out-of-bounds
|
||
|
access, use-after-free, and invalid-free errors. KFENCE is designed
|
||
|
to have negligible cost to permit enabling it in production
|
||
|
environments.
|
||
|
|
||
|
Note that, KFENCE is not a substitute for explicit testing with tools
|
||
|
such as KASAN. KFENCE can detect a subset of bugs that KASAN can
|
||
|
detect, albeit at very different performance profiles. If you can
|
||
|
afford to use KASAN, continue using KASAN, for example in test
|
||
|
environments. If your kernel targets production use, and cannot
|
||
|
enable KASAN due to its cost, consider using KFENCE.
|
||
|
|
||
|
if KFENCE
|
||
|
|
||
|
config KFENCE_STATIC_KEYS
|
||
|
bool "Use static keys to set up allocations"
|
||
|
default y
|
||
|
depends on JUMP_LABEL # To ensure performance, require jump labels
|
||
|
help
|
||
|
Use static keys (static branches) to set up KFENCE allocations. Using
|
||
|
static keys is normally recommended, because it avoids a dynamic
|
||
|
branch in the allocator's fast path. However, with very low sample
|
||
|
intervals, or on systems that do not support jump labels, a dynamic
|
||
|
branch may still be an acceptable performance trade-off.
|
||
|
|
||
|
config KFENCE_SAMPLE_INTERVAL
|
||
|
int "Default sample interval in milliseconds"
|
||
|
default 100
|
||
|
help
|
||
|
The KFENCE sample interval determines the frequency with which heap
|
||
|
allocations will be guarded by KFENCE. May be overridden via boot
|
||
|
parameter "kfence.sample_interval".
|
||
|
|
||
|
Set this to 0 to disable KFENCE by default, in which case only
|
||
|
setting "kfence.sample_interval" to a non-zero value enables KFENCE.
|
||
|
|
||
|
config KFENCE_NUM_OBJECTS
|
||
|
int "Number of guarded objects available"
|
||
|
range 1 65535
|
||
|
default 255
|
||
|
help
|
||
|
The number of guarded objects available. For each KFENCE object, 2
|
||
|
pages are required; with one containing the object and two adjacent
|
||
|
ones used as guard pages.
|
||
|
|
||
|
config KFENCE_STRESS_TEST_FAULTS
|
||
|
int "Stress testing of fault handling and error reporting" if EXPERT
|
||
|
default 0
|
||
|
help
|
||
|
The inverse probability with which to randomly protect KFENCE object
|
||
|
pages, resulting in spurious use-after-frees. The main purpose of
|
||
|
this option is to stress test KFENCE with concurrent error reports
|
||
|
and allocations/frees. A value of 0 disables stress testing logic.
|
||
|
|
||
|
Only for KFENCE testing; set to 0 if you are not a KFENCE developer.
|
||
|
|
||
|
endif # KFENCE
|