Re: [PATCH V2 07/10] kasan: Make INLINE KASan support arch selectable

From: Andrey Ryabinin
Date: Thu Aug 27 2015 - 07:56:02 EST


2015-08-26 11:26 GMT+03:00 Aneesh Kumar K.V <aneesh.kumar@xxxxxxxxxxxxxxxxxx>:
> Some of the archs, may find it difficult to support inline KASan
> mode. Add HAVE_ARCH_KASAN_INLINE so that we can disable inline
> support at config time.
>
> Signed-off-by: Aneesh Kumar K.V <aneesh.kumar@xxxxxxxxxxxxxxxxxx>
> ---
> arch/x86/Kconfig | 1 +
> lib/Kconfig.kasan | 2 ++
> scripts/Makefile.kasan | 28 ++++++++++++++--------------
> 3 files changed, 17 insertions(+), 14 deletions(-)
>
> diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig
> index b3a1a5d77d92..4416f80580fb 100644
> --- a/arch/x86/Kconfig
> +++ b/arch/x86/Kconfig
> @@ -78,6 +78,7 @@ config X86
> select HAVE_ARCH_HUGE_VMAP if X86_64 || X86_PAE
> select HAVE_ARCH_JUMP_LABEL
> select HAVE_ARCH_KASAN if X86_64 && SPARSEMEM_VMEMMAP
> + select HAVE_ARCH_KASAN_INLINE if X86_64 && SPARSEMEM_VMEMMAP

This will not work because config HAVE_ARCH_KASAN_INLINE is not defined.
Instead of you can just add following in this file:

config HAVE_ARCH_KASAN_INLINE
def_bool y
depends on KASAN


> select HAVE_ARCH_KGDB
> select HAVE_ARCH_KMEMCHECK
> select HAVE_ARCH_SECCOMP_FILTER
> diff --git a/lib/Kconfig.kasan b/lib/Kconfig.kasan
> index 39f24d6721e5..e9d1bb1175b8 100644
> --- a/lib/Kconfig.kasan
> +++ b/lib/Kconfig.kasan
> @@ -32,6 +32,7 @@ config KASAN_OUTLINE
> however it doesn't bloat size of kernel's .text section so
> much as inline does.
>
> +if HAVE_ARCH_KASAN_INLINE
> config KASAN_INLINE
> bool "Inline instrumentation"

depends on HAVE_ARCH_KASAN_INLINE

> help
> @@ -40,6 +41,7 @@ config KASAN_INLINE
> it gives about x2 boost over outline instrumentation), but
> make kernel's .text size much bigger.
> This requires a gcc version of 5.0 or later.
> +endif
>
> endchoice
>
> diff --git a/scripts/Makefile.kasan b/scripts/Makefile.kasan
> index 3f874d24234f..c1c06e9e107a 100644
> --- a/scripts/Makefile.kasan
> +++ b/scripts/Makefile.kasan
> @@ -1,29 +1,29 @@
> ifdef CONFIG_KASAN
> -ifdef CONFIG_KASAN_INLINE
> - call_threshold := 10000
> -else
> - call_threshold := 0
> -endif
> -
> -CFLAGS_KASAN_MINIMAL := -fsanitize=kernel-address
>
> CFLAGS_KASAN := $(call cc-option, -fsanitize=kernel-address \
> - -fasan-shadow-offset=$(CONFIG_KASAN_SHADOW_OFFSET) \
> - --param asan-stack=1 --param asan-globals=1 \
> - --param asan-instrumentation-with-call-threshold=$(call_threshold))
> -
> -ifeq ($(call cc-option, $(CFLAGS_KASAN_MINIMAL) -Werror),)
> + --param asan-instrumentation-with-call-threshold=0)
> +ifeq ($(CFLAGS_KASAN),)
> ifneq ($(CONFIG_COMPILE_TEST),y)
> $(warning Cannot use CONFIG_KASAN: \
> -fsanitize=kernel-address is not supported by compiler)
> endif
> else
> - ifeq ($(CFLAGS_KASAN),)
> +
> + ifdef CONFIG_KASAN_INLINE
> + CFLAGS_KASAN_INLINE := $(call cc-option, -fsanitize=kernel-address \
> + -fasan-shadow-offset=$(CONFIG_KASAN_SHADOW_OFFSET) \
> + --param asan-stack=1 --param asan-globals=1 \
> + --param asan-instrumentation-with-call-threshold=10000)
> +
> + ifeq ($(CFLAGS_KASAN_INLINE),)
> ifneq ($(CONFIG_COMPILE_TEST),y)
> $(warning CONFIG_KASAN: compiler does not support all options.\
> Trying minimal configuration)
> endif
> - CFLAGS_KASAN := $(CFLAGS_KASAN_MINIMAL)
> + else
> + CFLAGS_KASAN := $(CFLAGS_KASAN_INLINE)
> endif
> + endif
> +

This removes stack and globals for CONFIG_KASAN_OUTLINE=y. Why?
Those are completely separate features. So this patch shouldn't touch
this Makefile at all.
Depends on HAVE_ARCH_KASAN_INLINE in CONFIG_KASAN_INLINE should be enough.

But you need to disable 'asan-stack' and 'asan-globals' for pcc64.
I'd suggest to introduce CFLAGS_ARCH_KASAN.
Define it in ppc64 Makefile:

CFLAGS_ARCH_KASAN := --param asan-globals=0 --param asan-stack=0

and add these flags to CFLAGS_KASAN_MINIMAL and CFLAGS_KASAN in Makefile.kasan.


> endif
> endif
> --
> 2.5.0
>
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/