1# SPDX-License-Identifier: GPL-2.0 2ifdef CONFIG_KASAN 3ifdef CONFIG_KASAN_INLINE 4 call_threshold := 10000 5else 6 call_threshold := 0 7endif 8 9KASAN_SHADOW_OFFSET ?= $(CONFIG_KASAN_SHADOW_OFFSET) 10 11CFLAGS_KASAN_MINIMAL := -fsanitize=kernel-address 12 13cc-param = $(call cc-option, -mllvm -$(1), $(call cc-option, --param $(1))) 14 15ifeq ($(call cc-option, $(CFLAGS_KASAN_MINIMAL) -Werror),) 16 ifneq ($(CONFIG_COMPILE_TEST),y) 17 $(warning Cannot use CONFIG_KASAN: \ 18 -fsanitize=kernel-address is not supported by compiler) 19 endif 20else 21 # -fasan-shadow-offset fails without -fsanitize 22 CFLAGS_KASAN_SHADOW := $(call cc-option, -fsanitize=kernel-address \ 23 -fasan-shadow-offset=$(KASAN_SHADOW_OFFSET), \ 24 $(call cc-option, -fsanitize=kernel-address \ 25 -mllvm -asan-mapping-offset=$(KASAN_SHADOW_OFFSET))) 26 27 ifeq ($(strip $(CFLAGS_KASAN_SHADOW)),) 28 CFLAGS_KASAN := $(CFLAGS_KASAN_MINIMAL) 29 else 30 # Now add all the compiler specific options that are valid standalone 31 CFLAGS_KASAN := $(CFLAGS_KASAN_SHADOW) \ 32 $(call cc-param,asan-globals=1) \ 33 $(call cc-param,asan-instrumentation-with-call-threshold=$(call_threshold)) \ 34 $(call cc-param,asan-stack=1) \ 35 $(call cc-param,asan-use-after-scope=1) \ 36 $(call cc-param,asan-instrument-allocas=1) 37 endif 38 39endif 40 41ifdef CONFIG_KASAN_EXTRA 42CFLAGS_KASAN += $(call cc-option, -fsanitize-address-use-after-scope) 43endif 44 45CFLAGS_KASAN_NOSANITIZE := -fno-builtin 46 47endif 48