Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b919d3e2 authored by Andrey Ryabinin's avatar Andrey Ryabinin Committed by Prasad Sodagudi
Browse files

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.

Change-Id: I0c20de83dd3eaea0daf9e3dd60aea23cc97c772f
Link: http://lkml.kernel.org/r/20171204191735.132544-3-paullawrence@google.com


Signed-off-by: default avatarAndrey Ryabinin <aryabinin@virtuozzo.com>
Signed-off-by: default avatarPaul Lawrence <paullawrence@google.com>
Reviewed-by: default avatarAlexander 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: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
Git-commit: 1a69e7ce8391a8bc808baf04e06d88ab4024ca47
Git-repo: git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git


Signed-off-by: default avatarPrasad Sodagudi <psodagud@codeaurora.org>
parent 9510f63d
Loading
Loading
Loading
Loading
+18 −19
Original line number Diff line number Diff line
@@ -10,32 +10,31 @@ KASAN_SHADOW_OFFSET ?= $(CONFIG_KASAN_SHADOW_OFFSET)

CFLAGS_KASAN_MINIMAL := -fsanitize=kernel-address

ifeq ($(cc-name),clang)
CFLAGS_KASAN := $(call cc-option, -fsanitize=kernel-address \
		-mllvm \
		-asan-mapping-offset=$(KASAN_SHADOW_OFFSET) \
		-asan-stack=1 -asan-globals=1 \
		-asan-instrumentation-with-call-threshold=$(call_threshold))
else
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))
endif

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)
        $(warning Cannot use CONFIG_KASAN: \
            -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
   # -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)