]> git.ipfire.org Git - thirdparty/kernel/linux.git/blame - scripts/Makefile.kasan
Merge tag 'cocci-for-6.10' of git://git.kernel.org/pub/scm/linux/kernel/git/jlawall...
[thirdparty/kernel/linux.git] / scripts / Makefile.kasan
CommitLineData
b2441318 1# SPDX-License-Identifier: GPL-2.0
36be5cba
ME
2
3ifdef CONFIG_CC_HAS_KASAN_MEMINTRINSIC_PREFIX
4# Safe for compiler to generate meminstrinsic calls in uninstrumented files.
5CFLAGS_KASAN_NOSANITIZE :=
6else
7# Don't let compiler generate memintrinsic calls in uninstrumented files
8# because they are instrumented.
34b5560d 9CFLAGS_KASAN_NOSANITIZE := -fno-builtin
36be5cba
ME
10endif
11
34b5560d 12KASAN_SHADOW_OFFSET ?= $(CONFIG_KASAN_SHADOW_OFFSET)
34b5560d 13
5c595ac4
AB
14cc-param = $(call cc-option, -mllvm -$(1), $(call cc-option, --param $(1)))
15
02c58773
WW
16ifdef CONFIG_KASAN_STACK
17 stack_enable := 1
18else
19 stack_enable := 0
20endif
21
2bd926b4
AK
22ifdef CONFIG_KASAN_GENERIC
23
0b24becc
AR
24ifdef CONFIG_KASAN_INLINE
25 call_threshold := 10000
26else
27 call_threshold := 0
28endif
29
30CFLAGS_KASAN_MINIMAL := -fsanitize=kernel-address
31
2bd926b4
AK
32# -fasan-shadow-offset fails without -fsanitize
33CFLAGS_KASAN_SHADOW := $(call cc-option, -fsanitize=kernel-address \
1a69e7ce
AR
34 -fasan-shadow-offset=$(KASAN_SHADOW_OFFSET), \
35 $(call cc-option, -fsanitize=kernel-address \
36 -mllvm -asan-mapping-offset=$(KASAN_SHADOW_OFFSET)))
37
2bd926b4
AK
38ifeq ($(strip $(CFLAGS_KASAN_SHADOW)),)
39 CFLAGS_KASAN := $(CFLAGS_KASAN_MINIMAL)
40else
41 # Now add all the compiler specific options that are valid standalone
42 CFLAGS_KASAN := $(CFLAGS_KASAN_SHADOW) \
43 $(call cc-param,asan-globals=1) \
44 $(call cc-param,asan-instrumentation-with-call-threshold=$(call_threshold)) \
2bd926b4 45 $(call cc-param,asan-instrument-allocas=1)
0b24becc 46endif
c5caf21a 47
19532869
NC
48CFLAGS_KASAN += $(call cc-param,asan-stack=$(stack_enable))
49
51287dcb
ME
50# Instrument memcpy/memset/memmove calls by using instrumented __asan_mem*()
51# instead. With compilers that don't support this option, compiler-inserted
52# memintrinsics won't be checked by KASAN on GENERIC_ENTRY architectures.
53CFLAGS_KASAN += $(call cc-param,asan-kernel-mem-intrinsic-prefix=1)
54
2bd926b4 55endif # CONFIG_KASAN_GENERIC
0e410e15 56
2bd926b4
AK
57ifdef CONFIG_KASAN_SW_TAGS
58
59ifdef CONFIG_KASAN_INLINE
5c595ac4 60 instrumentation_flags := $(call cc-param,hwasan-mapping-offset=$(KASAN_SHADOW_OFFSET))
2bd926b4 61else
5c595ac4 62 instrumentation_flags := $(call cc-param,hwasan-instrument-with-calls=1)
2bd926b4
AK
63endif
64
65CFLAGS_KASAN := -fsanitize=kernel-hwaddress \
02c58773 66 $(call cc-param,hwasan-instrument-stack=$(stack_enable)) \
5c595ac4 67 $(call cc-param,hwasan-use-short-granules=0) \
1cbdf60b 68 $(call cc-param,hwasan-inline-all-checks=0) \
2bd926b4
AK
69 $(instrumentation_flags)
70
51287dcb 71# Instrument memcpy/memset/memmove calls by using instrumented __hwasan_mem*().
90fd8336 72ifeq ($(call clang-min-version, 150000)$(call gcc-min-version, 130000),y)
51287dcb 73CFLAGS_KASAN += $(call cc-param,hwasan-kernel-mem-intrinsic-prefix=1)
90fd8336 74endif
51287dcb 75
2bd926b4 76endif # CONFIG_KASAN_SW_TAGS
bb273211
MY
77
78export CFLAGS_KASAN CFLAGS_KASAN_NOSANITIZE