1*4882a593Smuzhiyun# SPDX-License-Identifier: GPL-2.0 2*4882a593SmuzhiyunCFLAGS_KASAN_NOSANITIZE := -fno-builtin 3*4882a593SmuzhiyunKASAN_SHADOW_OFFSET ?= $(CONFIG_KASAN_SHADOW_OFFSET) 4*4882a593Smuzhiyun 5*4882a593Smuzhiyuncc-param = $(call cc-option, -mllvm -$(1), $(call cc-option, --param $(1))) 6*4882a593Smuzhiyun 7*4882a593Smuzhiyunifdef CONFIG_KASAN_STACK 8*4882a593Smuzhiyun stack_enable := 1 9*4882a593Smuzhiyunelse 10*4882a593Smuzhiyun stack_enable := 0 11*4882a593Smuzhiyunendif 12*4882a593Smuzhiyun 13*4882a593Smuzhiyunifdef CONFIG_KASAN_GENERIC 14*4882a593Smuzhiyun 15*4882a593Smuzhiyunifdef CONFIG_KASAN_INLINE 16*4882a593Smuzhiyun call_threshold := 10000 17*4882a593Smuzhiyunelse 18*4882a593Smuzhiyun call_threshold := 0 19*4882a593Smuzhiyunendif 20*4882a593Smuzhiyun 21*4882a593SmuzhiyunCFLAGS_KASAN_MINIMAL := -fsanitize=kernel-address 22*4882a593Smuzhiyun 23*4882a593Smuzhiyun# -fasan-shadow-offset fails without -fsanitize 24*4882a593SmuzhiyunCFLAGS_KASAN_SHADOW := $(call cc-option, -fsanitize=kernel-address \ 25*4882a593Smuzhiyun -fasan-shadow-offset=$(KASAN_SHADOW_OFFSET), \ 26*4882a593Smuzhiyun $(call cc-option, -fsanitize=kernel-address \ 27*4882a593Smuzhiyun -mllvm -asan-mapping-offset=$(KASAN_SHADOW_OFFSET))) 28*4882a593Smuzhiyun 29*4882a593Smuzhiyunifeq ($(strip $(CFLAGS_KASAN_SHADOW)),) 30*4882a593Smuzhiyun CFLAGS_KASAN := $(CFLAGS_KASAN_MINIMAL) 31*4882a593Smuzhiyunelse 32*4882a593Smuzhiyun # Now add all the compiler specific options that are valid standalone 33*4882a593Smuzhiyun CFLAGS_KASAN := $(CFLAGS_KASAN_SHADOW) \ 34*4882a593Smuzhiyun $(call cc-param,asan-globals=1) \ 35*4882a593Smuzhiyun $(call cc-param,asan-instrumentation-with-call-threshold=$(call_threshold)) \ 36*4882a593Smuzhiyun $(call cc-param,asan-stack=$(stack_enable)) \ 37*4882a593Smuzhiyun $(call cc-param,asan-instrument-allocas=1) 38*4882a593Smuzhiyunendif 39*4882a593Smuzhiyun 40*4882a593Smuzhiyunendif # CONFIG_KASAN_GENERIC 41*4882a593Smuzhiyun 42*4882a593Smuzhiyunifdef CONFIG_KASAN_SW_TAGS 43*4882a593Smuzhiyun 44*4882a593Smuzhiyunifdef CONFIG_KASAN_INLINE 45*4882a593Smuzhiyun instrumentation_flags := $(call cc-param,hwasan-mapping-offset=$(KASAN_SHADOW_OFFSET)) 46*4882a593Smuzhiyunelse 47*4882a593Smuzhiyun instrumentation_flags := $(call cc-param,hwasan-instrument-with-calls=1) 48*4882a593Smuzhiyunendif 49*4882a593Smuzhiyun 50*4882a593SmuzhiyunCFLAGS_KASAN := -fsanitize=kernel-hwaddress \ 51*4882a593Smuzhiyun $(call cc-param,hwasan-instrument-stack=$(stack_enable)) \ 52*4882a593Smuzhiyun $(call cc-param,hwasan-use-short-granules=0) \ 53*4882a593Smuzhiyun $(instrumentation_flags) 54*4882a593Smuzhiyun 55*4882a593Smuzhiyunendif # CONFIG_KASAN_SW_TAGS 56*4882a593Smuzhiyun 57*4882a593Smuzhiyunexport CFLAGS_KASAN CFLAGS_KASAN_NOSANITIZE 58