LKML Archive on lore.kernel.org help / color / mirror / Atom feed
* [PATCH] arm64: Enable KCSAN @ 2021-11-26 8:00 Kefeng Wang 2021-11-26 10:39 ` Marco Elver 0 siblings, 1 reply; 3+ messages in thread From: Kefeng Wang @ 2021-11-26 8:00 UTC (permalink / raw) To: Marco Elver, Catalin Marinas, Will Deacon, linux-arm-kernel, linux-kernel Cc: Kefeng Wang This patch enables KCSAN for arm64, with updates to build rules to not use KCSAN for several incompatible compilation units. Tested selftest and kcsan_test, and all passed. Signed-off-by: Kefeng Wang <wangkefeng.wang@huawei.com> --- Tested on Qemu with clang 13, based on 5.16-rc2. [ 0.221518] kcsan: enabled early [ 0.222422] kcsan: strict mode configured ... [ 5.839223] kcsan: selftest: 3/3 tests passed ... [ 517.895102] # kcsan: pass:24 fail:0 skip:0 total:24 [ 517.896393] # Totals: pass:168 fail:0 skip:0 total:168 [ 517.897502] ok 1 - kcsan arch/arm64/Kconfig | 1 + arch/arm64/kernel/vdso/Makefile | 1 + arch/arm64/kvm/hyp/nvhe/Makefile | 1 + 3 files changed, 3 insertions(+) diff --git a/arch/arm64/Kconfig b/arch/arm64/Kconfig index 4ff73299f8a9..0ac90875f71d 100644 --- a/arch/arm64/Kconfig +++ b/arch/arm64/Kconfig @@ -150,6 +150,7 @@ config ARM64 select HAVE_ARCH_KASAN_VMALLOC if HAVE_ARCH_KASAN select HAVE_ARCH_KASAN_SW_TAGS if HAVE_ARCH_KASAN select HAVE_ARCH_KASAN_HW_TAGS if (HAVE_ARCH_KASAN && ARM64_MTE) + select HAVE_ARCH_KCSAN select HAVE_ARCH_KFENCE select HAVE_ARCH_KGDB select HAVE_ARCH_MMAP_RND_BITS diff --git a/arch/arm64/kernel/vdso/Makefile b/arch/arm64/kernel/vdso/Makefile index 700767dfd221..60813497a381 100644 --- a/arch/arm64/kernel/vdso/Makefile +++ b/arch/arm64/kernel/vdso/Makefile @@ -32,6 +32,7 @@ ccflags-y += -DDISABLE_BRANCH_PROFILING -DBUILD_VDSO CFLAGS_REMOVE_vgettimeofday.o = $(CC_FLAGS_FTRACE) -Os $(CC_FLAGS_SCS) $(GCC_PLUGINS_CFLAGS) \ $(CC_FLAGS_LTO) KASAN_SANITIZE := n +KCSAN_SANITIZE := n UBSAN_SANITIZE := n OBJECT_FILES_NON_STANDARD := y KCOV_INSTRUMENT := n diff --git a/arch/arm64/kvm/hyp/nvhe/Makefile b/arch/arm64/kvm/hyp/nvhe/Makefile index c3c11974fa3b..24b2c2425b38 100644 --- a/arch/arm64/kvm/hyp/nvhe/Makefile +++ b/arch/arm64/kvm/hyp/nvhe/Makefile @@ -89,6 +89,7 @@ KBUILD_CFLAGS := $(filter-out $(CC_FLAGS_FTRACE) $(CC_FLAGS_SCS) $(CC_FLAGS_CFI) # cause crashes. Just disable it. GCOV_PROFILE := n KASAN_SANITIZE := n +KCSAN_SANITIZE := n UBSAN_SANITIZE := n KCOV_INSTRUMENT := n -- 2.26.2 ^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH] arm64: Enable KCSAN 2021-11-26 8:00 [PATCH] arm64: Enable KCSAN Kefeng Wang @ 2021-11-26 10:39 ` Marco Elver 2021-11-26 12:02 ` Kefeng Wang 0 siblings, 1 reply; 3+ messages in thread From: Marco Elver @ 2021-11-26 10:39 UTC (permalink / raw) To: Kefeng Wang, Mark Rutland Cc: Catalin Marinas, Will Deacon, linux-arm-kernel, linux-kernel On Fri, Nov 26, 2021 at 04:00PM +0800, Kefeng Wang wrote: > This patch enables KCSAN for arm64, with updates to build rules > to not use KCSAN for several incompatible compilation units. > > Tested selftest and kcsan_test, and all passed. > > Signed-off-by: Kefeng Wang <wangkefeng.wang@huawei.com> Nice! Although I think Mark (Cc'd) also had been working on this and probably knows what, if anything, is still missing. For one, have you tested gcc 11? To make it work with gcc 11, my preferred solution is that you simply squash this: --- diff --git a/kernel/kcsan/Makefile b/kernel/kcsan/Makefile index c2bb07f5bcc7..d7d0b51b79f5 100644 --- a/kernel/kcsan/Makefile +++ b/kernel/kcsan/Makefile @@ -8,6 +8,7 @@ CFLAGS_REMOVE_debugfs.o = $(CC_FLAGS_FTRACE) CFLAGS_REMOVE_report.o = $(CC_FLAGS_FTRACE) CFLAGS_core.o := $(call cc-option,-fno-conserve-stack) \ + $(call cc-option,-mno-outline-atomics) \ -fno-stack-protector -DDISABLE_BRANCH_PROFILING obj-y := core.o debugfs.o report.o --- [ I have changes to kernel/kcsan/Makefile that I expect to land in -next soon'ish, the above is small enough that git can auto-merge. ] gcc somehow made outline-atomics the default (unlike clang), which will cause linker errors for kernel/kcsan/core.o. While the support for builtin atomics shouldn't be required on arm64, I want it to be (compile-)testable on all architectures. Although there's an exception that certain compiler instrumentation actually require working builtin atomics support, specifically GCOV_KERNEL. Thanks, -- Marco > --- > Tested on Qemu with clang 13, based on 5.16-rc2. > > [ 0.221518] kcsan: enabled early > [ 0.222422] kcsan: strict mode configured > ... > [ 5.839223] kcsan: selftest: 3/3 tests passed > ... > [ 517.895102] # kcsan: pass:24 fail:0 skip:0 total:24 > [ 517.896393] # Totals: pass:168 fail:0 skip:0 total:168 > [ 517.897502] ok 1 - kcsan > > arch/arm64/Kconfig | 1 + > arch/arm64/kernel/vdso/Makefile | 1 + > arch/arm64/kvm/hyp/nvhe/Makefile | 1 + > 3 files changed, 3 insertions(+) > > diff --git a/arch/arm64/Kconfig b/arch/arm64/Kconfig > index 4ff73299f8a9..0ac90875f71d 100644 > --- a/arch/arm64/Kconfig > +++ b/arch/arm64/Kconfig > @@ -150,6 +150,7 @@ config ARM64 > select HAVE_ARCH_KASAN_VMALLOC if HAVE_ARCH_KASAN > select HAVE_ARCH_KASAN_SW_TAGS if HAVE_ARCH_KASAN > select HAVE_ARCH_KASAN_HW_TAGS if (HAVE_ARCH_KASAN && ARM64_MTE) > + select HAVE_ARCH_KCSAN > select HAVE_ARCH_KFENCE > select HAVE_ARCH_KGDB > select HAVE_ARCH_MMAP_RND_BITS > diff --git a/arch/arm64/kernel/vdso/Makefile b/arch/arm64/kernel/vdso/Makefile > index 700767dfd221..60813497a381 100644 > --- a/arch/arm64/kernel/vdso/Makefile > +++ b/arch/arm64/kernel/vdso/Makefile > @@ -32,6 +32,7 @@ ccflags-y += -DDISABLE_BRANCH_PROFILING -DBUILD_VDSO > CFLAGS_REMOVE_vgettimeofday.o = $(CC_FLAGS_FTRACE) -Os $(CC_FLAGS_SCS) $(GCC_PLUGINS_CFLAGS) \ > $(CC_FLAGS_LTO) > KASAN_SANITIZE := n > +KCSAN_SANITIZE := n > UBSAN_SANITIZE := n > OBJECT_FILES_NON_STANDARD := y > KCOV_INSTRUMENT := n > diff --git a/arch/arm64/kvm/hyp/nvhe/Makefile b/arch/arm64/kvm/hyp/nvhe/Makefile > index c3c11974fa3b..24b2c2425b38 100644 > --- a/arch/arm64/kvm/hyp/nvhe/Makefile > +++ b/arch/arm64/kvm/hyp/nvhe/Makefile > @@ -89,6 +89,7 @@ KBUILD_CFLAGS := $(filter-out $(CC_FLAGS_FTRACE) $(CC_FLAGS_SCS) $(CC_FLAGS_CFI) > # cause crashes. Just disable it. > GCOV_PROFILE := n > KASAN_SANITIZE := n > +KCSAN_SANITIZE := n > UBSAN_SANITIZE := n > KCOV_INSTRUMENT := n > > -- > 2.26.2 > ^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH] arm64: Enable KCSAN 2021-11-26 10:39 ` Marco Elver @ 2021-11-26 12:02 ` Kefeng Wang 0 siblings, 0 replies; 3+ messages in thread From: Kefeng Wang @ 2021-11-26 12:02 UTC (permalink / raw) To: Marco Elver, Mark Rutland Cc: Catalin Marinas, Will Deacon, linux-arm-kernel, linux-kernel On 2021/11/26 18:39, Marco Elver wrote: > On Fri, Nov 26, 2021 at 04:00PM +0800, Kefeng Wang wrote: >> This patch enables KCSAN for arm64, with updates to build rules >> to not use KCSAN for several incompatible compilation units. >> >> Tested selftest and kcsan_test, and all passed. >> >> Signed-off-by: Kefeng Wang <wangkefeng.wang@huawei.com> > Nice! Although I think Mark (Cc'd) also had been working on this and > probably knows what, if anything, is still missing. > > For one, have you tested gcc 11? To make it work with gcc 11, my > preferred solution is that you simply squash this: I only have gcc10, will try gcc 11. > > --- > > diff --git a/kernel/kcsan/Makefile b/kernel/kcsan/Makefile > index c2bb07f5bcc7..d7d0b51b79f5 100644 > --- a/kernel/kcsan/Makefile > +++ b/kernel/kcsan/Makefile > @@ -8,6 +8,7 @@ CFLAGS_REMOVE_debugfs.o = $(CC_FLAGS_FTRACE) > CFLAGS_REMOVE_report.o = $(CC_FLAGS_FTRACE) > > CFLAGS_core.o := $(call cc-option,-fno-conserve-stack) \ > + $(call cc-option,-mno-outline-atomics) \ > -fno-stack-protector -DDISABLE_BRANCH_PROFILING > > obj-y := core.o debugfs.o report.o > > --- > > [ I have changes to kernel/kcsan/Makefile that I expect to land in -next > soon'ish, the above is small enough that git can auto-merge. ] > > gcc somehow made outline-atomics the default (unlike clang), which will > cause linker errors for kernel/kcsan/core.o. While the support for > builtin atomics shouldn't be required on arm64, I want it to be > (compile-)testable on all architectures. Although there's an exception > that certain compiler instrumentation actually require working builtin > atomics support, specifically GCOV_KERNEL. Thanks for your infos, I will try to test it. > Thanks, > -- Marco > > ^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2021-11-26 12:04 UTC | newest] Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2021-11-26 8:00 [PATCH] arm64: Enable KCSAN Kefeng Wang 2021-11-26 10:39 ` Marco Elver 2021-11-26 12:02 ` Kefeng Wang
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).