(Upstream commit 7771bdbbfd).
Use after scope bugs detector seems to be almost entirely useless for
the linux kernel. It exists over two years, but I've seen only one
valid bug so far [1]. And the bug was fixed before it has been
reported. There were some other use-after-scope reports, but they were
false-positives due to different reasons like incompatibility with
structleak plugin.
This feature significantly increases stack usage, especially with GCC <
9 version, and causes a 32K stack overflow. It probably adds
performance penalty too.
Given all that, let's remove use-after-scope detector entirely.
While preparing this patch I've noticed that we mistakenly enable
use-after-scope detection for clang compiler regardless of
CONFIG_KASAN_EXTRA setting. This is also fixed now.
[1] http://lkml.kernel.org/r/<20171129052106.rhgbjhhis53hkgfn@wfg-t540p.sh.intel.com>
Link: http://lkml.kernel.org/r/20190111185842.13978-1-aryabinin@virtuozzo.com
Signed-off-by: Andrey Ryabinin <aryabinin@virtuozzo.com>
Acked-by: Will Deacon <will.deacon@arm.com> [arm64]
Cc: Qian Cai <cai@lca.pw>
Cc: Alexander Potapenko <glider@google.com>
Cc: Dmitry Vyukov <dvyukov@google.com>
Cc: Catalin Marinas <catalin.marinas@arm.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Change-Id: I00d869a5e287e3e198950b78ad17bd6ff6a51595
Signed-off-by: Andrey Konovalov <andreyknvl@google.com>
Bug: 128674696
51 lines
1.4 KiB
Text
51 lines
1.4 KiB
Text
# SPDX-License-Identifier: GPL-2.0
|
|
ifdef CONFIG_KASAN_GENERIC
|
|
|
|
ifdef CONFIG_KASAN_INLINE
|
|
call_threshold := 10000
|
|
else
|
|
call_threshold := 0
|
|
endif
|
|
|
|
KASAN_SHADOW_OFFSET ?= $(CONFIG_KASAN_SHADOW_OFFSET)
|
|
|
|
CFLAGS_KASAN_MINIMAL := -fsanitize=kernel-address
|
|
|
|
cc-param = $(call cc-option, -mllvm -$(1), $(call cc-option, --param $(1)))
|
|
|
|
# -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=$(CONFIG_KASAN_STACK)) \
|
|
$(call cc-param,asan-instrument-allocas=1)
|
|
endif
|
|
|
|
endif # CONFIG_KASAN_GENERIC
|
|
|
|
ifdef CONFIG_KASAN_SW_TAGS
|
|
|
|
ifdef CONFIG_KASAN_INLINE
|
|
instrumentation_flags := -mllvm -hwasan-mapping-offset=$(KASAN_SHADOW_OFFSET)
|
|
else
|
|
instrumentation_flags := -mllvm -hwasan-instrument-with-calls=1
|
|
endif
|
|
|
|
CFLAGS_KASAN := -fsanitize=kernel-hwaddress \
|
|
-mllvm -hwasan-instrument-stack=0 \
|
|
$(instrumentation_flags)
|
|
|
|
endif # CONFIG_KASAN_SW_TAGS
|
|
|
|
ifdef CONFIG_KASAN
|
|
CFLAGS_KASAN_NOSANITIZE := -fno-builtin
|
|
endif
|