Commit cc1d98f9 authored by Andrey Konovalov's avatar Andrey Konovalov Committed by Miguel Ojeda
Browse files

kasan: simplify and clarify Makefile



When KASAN support was being added to the Linux kernel, GCC did not yet
support all of the KASAN-related compiler options. Thus, the KASAN
Makefile had to probe the compiler for supported options.

Nowadays, the Linux kernel GCC version requirement is 5.1+, and thus we
don't need the probing of the -fasan-shadow-offset parameter: it exists in
all 5.1+ GCCs.

Simplify the KASAN Makefile to drop CFLAGS_KASAN_MINIMAL.

Also add a few more comments and unify the indentation.

Signed-off-by: default avatarAndrey Konovalov <andreyknvl@gmail.com>
Acked-by: default avatarMarco Elver <elver@google.com>
Link: https://lore.kernel.org/r/20240814161052.10374-1-andrey.konovalov@linux.dev


Signed-off-by: default avatarMiguel Ojeda <ojeda@kernel.org>
parent ca627e63
Loading
Loading
Loading
Loading
+23 −22
Original line number Diff line number Diff line
@@ -22,30 +22,31 @@ endif
ifdef CONFIG_KASAN_GENERIC

ifdef CONFIG_KASAN_INLINE
	# When the number of memory accesses in a function is less than this
	# call threshold number, the compiler will use inline instrumentation.
	# 10000 is chosen offhand as a sufficiently large number to make all
	# kernel functions to be instrumented inline.
	call_threshold := 10000
else
	call_threshold := 0
endif

CFLAGS_KASAN_MINIMAL := -fsanitize=kernel-address

# -fasan-shadow-offset fails without -fsanitize
CFLAGS_KASAN_SHADOW := $(call cc-option, -fsanitize=kernel-address \
# First, enable -fsanitize=kernel-address together with providing the shadow
# mapping offset, as for GCC, -fasan-shadow-offset fails without -fsanitize
# (GCC accepts the shadow mapping offset via -fasan-shadow-offset instead of
# a --param like the other KASAN parameters).
# Instead of ifdef-checking the compiler, rely on cc-option.
CFLAGS_KASAN := $(call cc-option, -fsanitize=kernel-address \
		-fasan-shadow-offset=$(KASAN_SHADOW_OFFSET), \
		$(call cc-option, -fsanitize=kernel-address \
		-mllvm -asan-mapping-offset=$(KASAN_SHADOW_OFFSET)))

ifeq ($(strip $(CFLAGS_KASAN_SHADOW)),)
	CFLAGS_KASAN := $(CFLAGS_KASAN_MINIMAL)
else
	# Now add all the compiler specific options that are valid standalone
	CFLAGS_KASAN := $(CFLAGS_KASAN_SHADOW) \
	 $(call cc-param,asan-globals=1) \
	 $(call cc-param,asan-instrumentation-with-call-threshold=$(call_threshold)) \
	 $(call cc-param,asan-instrument-allocas=1)
endif

CFLAGS_KASAN += $(call cc-param,asan-stack=$(stack_enable))
# Now, add other parameters enabled similarly in both GCC and Clang.
# As some of them are not supported by older compilers, use cc-param.
CFLAGS_KASAN += $(call cc-param,asan-instrumentation-with-call-threshold=$(call_threshold)) \
		$(call cc-param,asan-stack=$(stack_enable)) \
		$(call cc-param,asan-instrument-allocas=1) \
		$(call cc-param,asan-globals=1)

# Instrument memcpy/memset/memmove calls by using instrumented __asan_mem*()
# instead. With compilers that don't support this option, compiler-inserted