kasan/Makefile: support LLVM style asan parameters
LLVM doesn't understand GCC-style paramters ("--param asan-foo=bar"), thus we currently we don't use inline/globals/stack instrumentation when building the kernel with clang. Add support for LLVM-style parameters ("-mllvm -asan-foo=bar") to enable all KASAN features. Link: http://lkml.kernel.org/r/20171204191735.132544-3-paullawrence@google.com Signed-off-by: Andrey Ryabinin <aryabinin@virtuozzo.com> Signed-off-by: Paul Lawrence <paullawrence@google.com> Reviewed-by: Alexander Potapenko <glider@google.com> Cc: Dmitry Vyukov <dvyukov@google.com> Cc: Greg Hackmann <ghackmann@google.com> Cc: Masahiro Yamada <yamada.masahiro@socionext.com> Cc: Matthias Kaehlcke <mka@chromium.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
53a98ed73b
commit
1a69e7ce83
|
@ -10,10 +10,7 @@ KASAN_SHADOW_OFFSET ?= $(CONFIG_KASAN_SHADOW_OFFSET)
|
|||
|
||||
CFLAGS_KASAN_MINIMAL := -fsanitize=kernel-address
|
||||
|
||||
CFLAGS_KASAN := $(call cc-option, -fsanitize=kernel-address \
|
||||
-fasan-shadow-offset=$(KASAN_SHADOW_OFFSET) \
|
||||
--param asan-stack=1 --param asan-globals=1 \
|
||||
--param asan-instrumentation-with-call-threshold=$(call_threshold))
|
||||
cc-param = $(call cc-option, -mllvm -$(1), $(call cc-option, --param $(1)))
|
||||
|
||||
ifeq ($(call cc-option, $(CFLAGS_KASAN_MINIMAL) -Werror),)
|
||||
ifneq ($(CONFIG_COMPILE_TEST),y)
|
||||
|
@ -21,13 +18,23 @@ ifeq ($(call cc-option, $(CFLAGS_KASAN_MINIMAL) -Werror),)
|
|||
-fsanitize=kernel-address is not supported by compiler)
|
||||
endif
|
||||
else
|
||||
ifeq ($(CFLAGS_KASAN),)
|
||||
ifneq ($(CONFIG_COMPILE_TEST),y)
|
||||
$(warning CONFIG_KASAN: compiler does not support all options.\
|
||||
Trying minimal configuration)
|
||||
endif
|
||||
CFLAGS_KASAN := $(CFLAGS_KASAN_MINIMAL)
|
||||
endif
|
||||
# -fasan-shadow-offset fails without -fsanitize
|
||||
CFLAGS_KASAN_SHADOW := $(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-stack=1) \
|
||||
$(call cc-param,asan-use-after-scope=1)
|
||||
endif
|
||||
|
||||
endif
|
||||
|
||||
CFLAGS_KASAN += $(call cc-option, -fsanitize-address-use-after-scope)
|
||||
|
|
Loading…
Reference in a new issue