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

Commit e2aa3708 authored by Andrey Ryabinin's avatar Andrey Ryabinin Committed by Paul Lawrence
Browse files

UPSTREAM: 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: 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>

(cherry-picked from 1a69e7ce8391a8bc808baf04e06d88ab4024ca47)
Change-Id: I45293710522c70c031a9e2ea712c765c2fd86fc3
Signed-off-by: default avatarPaul Lawrence <paullawrence@google.com>
parent 08da675c
Loading
Loading
Loading
Loading
+18 −11
Original line number Diff line number Diff line
@@ -9,10 +9,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)
@@ -20,12 +17,22 @@ 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
   # -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
endif