Makefile: add -fno-builtin-stpcpy
LLVM implemented a recent "libcall optimization" that lowers calls to `sprintf(dest, "%s", str)` where the return value is used to `stpcpy(dest, str) - dest`. This generally avoids the machinery involved in parsing format strings. This optimization was introduced into clang-12. Because the kernel does not provide an implementation of stpcpy, we observe linkage failures for almost all targets when building with ToT clang. The interface is unsafe as it does not perform any bounds checking. Disable this "libcall optimization" via `-fno-builtin-stpcpy`. Unlike commit 5f074f3e192f ("lib/string.c: implement a basic bcmp") which cited failures with `-fno-builtin-*` flags being retained in LLVM LTO, that bug seems to have been fixed by https://reviews.llvm.org/D71193, so the above sha can now be reverted in favor of `-fno-builtin-bcmp`. Reported-by: Sami Tolvanen <samitolvanen@google.com> Suggested-by: Dávid Bolvanský <david.bolvansky@gmail.com> Suggested-by: Kees Cook <keescook@chromium.org> Signed-off-by: Nick Desaulniers <ndesaulniers@google.com> Cc: stable@vger.kernel.org # 4.4 Link: https://bugs.llvm.org/show_bug.cgi?id=47162 Link: https://github.com/ClangBuiltLinux/linux/issues/1126 Link: https://reviews.llvm.org/D85963 Signed-off-by: engstk <eng.stk@sapo.pt>
This commit is contained in:
parent
efc1365af7
commit
fc1df9ed89
6
Makefile
6
Makefile
@ -706,6 +706,12 @@ KBUILD_CFLAGS += $(call cc-option,--param=allow-store-data-races=0)
|
||||
# emitting calls to what will be undefined symbols.
|
||||
KBUILD_CFLAGS += -fno-builtin-stpcpy
|
||||
|
||||
# The compiler may "libcall optimize" certain function calls into the below
|
||||
# functions, for architectures that don't use -ffreestanding. If we don't plan
|
||||
# to provide implementations of these routines, then prevent the compiler from
|
||||
# emitting calls to what will be undefined symbols.
|
||||
KBUILD_CFLAGS += -fno-builtin-stpcpy
|
||||
|
||||
# check for 'asm goto'
|
||||
ifeq ($(call shell-cached,$(CONFIG_SHELL) $(srctree)/scripts/gcc-goto.sh $(CC) $(KBUILD_CFLAGS)), y)
|
||||
KBUILD_CFLAGS += -DCC_HAVE_ASM_GOTO
|
||||
|
Loading…
Reference in New Issue
Block a user