Borislav Petkov 564965
From: Josh Poimboeuf <jpoimboe@kernel.org>
Borislav Petkov 564965
Date: Mon, 18 Jul 2022 07:50:25 -0700
Borislav Petkov 564965
Subject: lkdtm: Disable return thunks in rodata.c
Borislav Petkov 564965
Git-commit: efc72a665a61fd48c462f5248a9e3dc991398ddd
Borislav Petkov 564965
Patch-mainline: v5.19-rc8
Borislav Petkov 564965
References: bsc#1178134
Borislav Petkov 564965
Borislav Petkov 564965
The following warning was seen:
Borislav Petkov 564965
Borislav Petkov 564965
  WARNING: CPU: 0 PID: 0 at arch/x86/kernel/alternative.c:557 apply_returns (arch/x86/kernel/alternative.c:557 (discriminator 1))
Borislav Petkov 564965
  Modules linked in:
Borislav Petkov 564965
  CPU: 0 PID: 0 Comm: swapper/0 Not tainted 5.19.0-rc4-00008-gee88d363d156 #1
Borislav Petkov 564965
  Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.16.0-debian-1.16.0-4 04/01/2014
Borislav Petkov 564965
  RIP: 0010:apply_returns (arch/x86/kernel/alternative.c:557 (discriminator 1))
Borislav Petkov 564965
  Code: ff ff 74 cb 48 83 c5 04 49 39 ee 0f 87 81 fe ff ff e9 22 ff ff ff 0f 0b 48 83 c5 04 49 39 ee 0f 87 6d fe ff ff e9 0e ff ff ff <0f> 0b 48 83 c5 04 49 39 ee 0f 87 59 fe ff ff e9 fa fe ff ff 48 89
Borislav Petkov 564965
Borislav Petkov 564965
The warning happened when apply_returns() failed to convert "JMP
Borislav Petkov 564965
__x86_return_thunk" to RET.  It was instead a JMP to nowhere, due to the
Borislav Petkov 564965
thunk relocation not getting resolved.
Borislav Petkov 564965
Borislav Petkov 564965
That rodata.o code is objcopy'd to .rodata, and later memcpy'd, so
Borislav Petkov 564965
relocations don't work (and are apparently silently ignored).
Borislav Petkov 564965
Borislav Petkov 564965
LKDTM is only used for testing, so the naked RET should be fine.  So
Borislav Petkov 564965
just disable return thunks for that file.
Borislav Petkov 564965
Borislav Petkov 564965
While at it, disable objtool and KCSAN for the file.
Borislav Petkov 564965
Borislav Petkov 564965
Fixes: 0b53c374b9ef ("x86/retpoline: Use -mfunction-return")
Borislav Petkov 564965
Reported-by: kernel test robot <oliver.sang@intel.com>
Borislav Petkov 564965
Debugged-by: Peter Zijlstra <peterz@infradead.org>
Borislav Petkov 564965
Signed-off-by: Josh Poimboeuf <jpoimboe@kernel.org>
Borislav Petkov 564965
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Borislav Petkov 564965
Link: https://lore.kernel.org/lkml/Ys58BxHxoDZ7rfpr@xsang-OptiPlex-9020/
Borislav Petkov 564965
Borislav Petkov 564965
Acked-by: Borislav Petkov <bp@suse.de>
Borislav Petkov 564965
---
Borislav Petkov 564965
 Makefile                    |    1 +
Borislav Petkov 564965
 drivers/misc/lkdtm/Makefile |    7 ++++++-
Borislav Petkov 564965
 2 files changed, 7 insertions(+), 1 deletion(-)
Borislav Petkov 564965
Borislav Petkov 564965
--- a/drivers/misc/lkdtm/Makefile
Borislav Petkov 564965
+++ b/drivers/misc/lkdtm/Makefile
Borislav Petkov 564965
@@ -11,7 +11,12 @@ lkdtm-$(CONFIG_LKDTM)		+= usercopy.o
Borislav Petkov 564965
 lkdtm-$(CONFIG_LKDTM)		+= stackleak.o
Borislav Petkov 564965
 
Borislav Petkov 564965
 KASAN_SANITIZE_stackleak.o	:= n
Borislav Petkov 564965
-KCOV_INSTRUMENT_rodata.o	:= n
Borislav Petkov 564965
+
Borislav Petkov 564965
+KASAN_SANITIZE_rodata.o			:= n
Borislav Petkov 564965
+KCSAN_SANITIZE_rodata.o			:= n
Borislav Petkov 564965
+KCOV_INSTRUMENT_rodata.o		:= n
Borislav Petkov 564965
+OBJECT_FILES_NON_STANDARD_rodata.o	:= y
Borislav Petkov 564965
+CFLAGS_REMOVE_rodata.o			+= $(CC_FLAGS_LTO) $(RETHUNK_CFLAGS)
Borislav Petkov 564965
 
Borislav Petkov 564965
 OBJCOPYFLAGS :=
Borislav Petkov 564965
 OBJCOPYFLAGS_rodata_objcopy.o	:= \
Borislav Petkov 564965
--- a/Makefile
Borislav Petkov 564965
+++ b/Makefile
Borislav Petkov 564965
@@ -648,6 +648,7 @@ RETPOLINE_VDSO_CFLAGS := $(call cc-optio
Borislav Petkov 564965
 RETHUNK_CFLAGS		:= -mfunction-return=thunk-extern
Borislav Petkov 564965
 RETPOLINE_CFLAGS	+= $(RETHUNK_CFLAGS)
Borislav Petkov 564965
 
Borislav Petkov 564965
+export RETHUNK_CFLAGS
Borislav Petkov 564965
 export RETPOLINE_CFLAGS
Borislav Petkov 564965
 export RETPOLINE_VDSO_CFLAGS
Borislav Petkov 564965