Borislav Petkov 1db863
From: Josh Poimboeuf <jpoimboe@kernel.org>
Borislav Petkov 1db863
Date: Mon, 18 Jul 2022 07:50:25 -0700
Borislav Petkov 1db863
Subject: lkdtm: Disable return thunks in rodata.c
Borislav Petkov 1db863
Git-commit: efc72a665a61fd48c462f5248a9e3dc991398ddd
Borislav Petkov 1db863
Patch-mainline: v5.19-rc8
Borislav Petkov 1db863
References: bsc#1114648
Borislav Petkov 1db863
Borislav Petkov 1db863
The following warning was seen:
Borislav Petkov 1db863
Borislav Petkov 1db863
  WARNING: CPU: 0 PID: 0 at arch/x86/kernel/alternative.c:557 apply_returns (arch/x86/kernel/alternative.c:557 (discriminator 1))
Borislav Petkov 1db863
  Modules linked in:
Borislav Petkov 1db863
  CPU: 0 PID: 0 Comm: swapper/0 Not tainted 5.19.0-rc4-00008-gee88d363d156 #1
Borislav Petkov 1db863
  Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.16.0-debian-1.16.0-4 04/01/2014
Borislav Petkov 1db863
  RIP: 0010:apply_returns (arch/x86/kernel/alternative.c:557 (discriminator 1))
Borislav Petkov 1db863
  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 1db863
Borislav Petkov 1db863
The warning happened when apply_returns() failed to convert "JMP
Borislav Petkov 1db863
__x86_return_thunk" to RET.  It was instead a JMP to nowhere, due to the
Borislav Petkov 1db863
thunk relocation not getting resolved.
Borislav Petkov 1db863
Borislav Petkov 1db863
That rodata.o code is objcopy'd to .rodata, and later memcpy'd, so
Borislav Petkov 1db863
relocations don't work (and are apparently silently ignored).
Borislav Petkov 1db863
Borislav Petkov 1db863
LKDTM is only used for testing, so the naked RET should be fine.  So
Borislav Petkov 1db863
just disable return thunks for that file.
Borislav Petkov 1db863
Borislav Petkov 1db863
While at it, disable objtool and KCSAN for the file.
Borislav Petkov 1db863
Borislav Petkov 1db863
Fixes: 0b53c374b9ef ("x86/retpoline: Use -mfunction-return")
Borislav Petkov 1db863
Reported-by: kernel test robot <oliver.sang@intel.com>
Borislav Petkov 1db863
Debugged-by: Peter Zijlstra <peterz@infradead.org>
Borislav Petkov 1db863
Signed-off-by: Josh Poimboeuf <jpoimboe@kernel.org>
Borislav Petkov 1db863
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Borislav Petkov 1db863
Link: https://lore.kernel.org/lkml/Ys58BxHxoDZ7rfpr@xsang-OptiPlex-9020/
Borislav Petkov 1db863
Borislav Petkov 1db863
Acked-by: Borislav Petkov <bp@suse.de>
Borislav Petkov 1db863
---
Borislav Petkov 1db863
 arch/x86/Makefile     |    2 ++
Borislav Petkov 1db863
 drivers/misc/Makefile |    1 +
Borislav Petkov 1db863
 2 files changed, 3 insertions(+)
Borislav Petkov 1db863
Borislav Petkov 1db863
--- a/arch/x86/Makefile
Borislav Petkov 1db863
+++ b/arch/x86/Makefile
Borislav Petkov 1db863
@@ -236,6 +236,8 @@ endif
Borislav Petkov 1db863
 RETHUNK_CFLAGS		:= -mfunction-return=thunk-extern
Borislav Petkov 1db863
 RETPOLINE_CFLAGS	+= $(RETHUNK_CFLAGS)
Borislav Petkov 1db863
 
Borislav Petkov 1db863
+export RETHUNK_CFLAGS
Borislav Petkov 1db863
+
Borislav Petkov 1db863
 # for vdso Makefile to exclude
Borislav Petkov 1db863
 export RETPOLINE_CFLAGS
Borislav Petkov 1db863
 
Borislav Petkov 1db863
--- a/drivers/misc/Makefile
Borislav Petkov 1db863
+++ b/drivers/misc/Makefile
Borislav Petkov 1db863
@@ -64,6 +64,7 @@ lkdtm-$(CONFIG_LKDTM)		+= lkdtm_rodata_o
Borislav Petkov 1db863
 lkdtm-$(CONFIG_LKDTM)		+= lkdtm_usercopy.o
Borislav Petkov 1db863
 
Borislav Petkov 1db863
 KCOV_INSTRUMENT_lkdtm_rodata.o	:= n
Borislav Petkov 1db863
+CFLAGS_REMOVE_lkdtm_rodata.o	+= $(RETHUNK_CFLAGS)
Borislav Petkov 1db863
 
Borislav Petkov 1db863
 OBJCOPYFLAGS :=
Borislav Petkov 1db863
 OBJCOPYFLAGS_lkdtm_rodata_objcopy.o := \