Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753000AbdLHJZv (ORCPT ); Fri, 8 Dec 2017 04:25:51 -0500 Received: from mail-vk0-f65.google.com ([209.85.213.65]:43047 "EHLO mail-vk0-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752604AbdLHJZs (ORCPT ); Fri, 8 Dec 2017 04:25:48 -0500 X-Google-Smtp-Source: AGs4zMb3avljhcBonY0Vsefb/GbWhOpzcO4/29bj7LKt8UB39BD6Ri49Ds9K8KDBqYUPv82Th4sixwUJtmMUhaNSb6k= MIME-Version: 1.0 In-Reply-To: <20171204191735.132544-3-paullawrence@google.com> References: <20171204191735.132544-1-paullawrence@google.com> <20171204191735.132544-3-paullawrence@google.com> From: Alexander Potapenko Date: Fri, 8 Dec 2017 10:25:46 +0100 Message-ID: Subject: Re: [PATCH v4 2/5] kasan/Makefile: Support LLVM style asan parameters. To: Paul Lawrence Cc: Andrey Ryabinin , Dmitry Vyukov , Masahiro Yamada , LKML , kasan-dev , Linux Memory Management List , Linux Kbuild mailing list , Matthias Kaehlcke , Michael Davidson , Greg Hackmann Content-Type: text/plain; charset="UTF-8" Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: 8bit X-MIME-Autoconverted: from quoted-printable to 8bit by nfs id vB89Pt0f004332 Content-Length: 3243 Lines: 83 On Mon, Dec 4, 2017 at 8:17 PM, Paul Lawrence wrote: > From: Andrey Ryabinin > > 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. > > Signed-off-by: Andrey Ryabinin > Signed-off-by: Paul Lawrence > --- > scripts/Makefile.kasan | 29 ++++++++++++++++++----------- > 1 file changed, 18 insertions(+), 11 deletions(-) > > diff --git a/scripts/Makefile.kasan b/scripts/Makefile.kasan > index 1ce7115aa499..d5a1a4b6d079 100644 > --- a/scripts/Makefile.kasan > +++ b/scripts/Makefile.kasan > @@ -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 Would be nice to have a comment here explaining that -fasan-shadow-offset is a GCC flag whereas -asan-mapping-offset is an LLVM one. > + 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) > -- > 2.15.0.531.g2ccb3012c9-goog > Reviewed-by: Alexander Potapenko -- Alexander Potapenko Software Engineer Google Germany GmbH Erika-Mann-Straße, 33 80636 München Geschäftsführer: Paul Manicle, Halimah DeLaine Prado Registergericht und -nummer: Hamburg, HRB 86891 Sitz der Gesellschaft: Hamburg