Commit d812db78 authored by Kees Cook's avatar Kees Cook Committed by Ingo Molnar
Browse files

vmlinux.lds.h: Avoid KASAN and KCSAN's unwanted sections

KASAN (-fsanitize=kernel-address) and KCSAN (-fsanitize=thread)
produce unwanted[1] .eh_frame and .init_array.* sections. Add them to
COMMON_DISCARDS, except with CONFIG_CONSTRUCTORS, which wants to keep
.init_array.* sections.

[1] https://bugs.llvm.org/show_bug.cgi?id=46478



Signed-off-by: default avatarKees Cook <keescook@chromium.org>
Signed-off-by: default avatarIngo Molnar <mingo@kernel.org>
Tested-by: default avatarMarco Elver <elver@google.com>
Cc: linux-arch@vger.kernel.org
Link: https://lore.kernel.org/r/20200821194310.3089815-4-keescook@chromium.org
parent dfbe6968
Loading
Loading
Loading
Loading
+20 −0
Original line number Diff line number Diff line
@@ -954,7 +954,27 @@
	EXIT_DATA
#endif

/*
 * Clang's -fsanitize=kernel-address and -fsanitize=thread produce
 * unwanted sections (.eh_frame and .init_array.*), but
 * CONFIG_CONSTRUCTORS wants to keep any .init_array.* sections.
 * https://bugs.llvm.org/show_bug.cgi?id=46478
 */
#if defined(CONFIG_KASAN_GENERIC) || defined(CONFIG_KCSAN)
# ifdef CONFIG_CONSTRUCTORS
#  define SANITIZER_DISCARDS						\
	*(.eh_frame)
# else
#  define SANITIZER_DISCARDS						\
	*(.init_array) *(.init_array.*)					\
	*(.eh_frame)
# endif
#else
# define SANITIZER_DISCARDS
#endif

#define COMMON_DISCARDS							\
	SANITIZER_DISCARDS						\
	*(.discard)							\
	*(.discard.*)							\
	*(.modinfo)							\