|
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 := \
|