From: Greg Kroah-Hartman Date: Mon, 18 Dec 2023 10:44:03 +0000 (+0100) Subject: 6.6-stable patches X-Git-Tag: v5.15.144~18 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=96827067198dc71660b5332a65d778105028ae22;p=thirdparty%2Fkernel%2Fstable-queue.git 6.6-stable patches added patches: x86-speculation-objtool-use-absolute-relocations-for-annotations.patch --- diff --git a/queue-6.6/series b/queue-6.6/series index 9b3d5457558..a65ce66ed12 100644 --- a/queue-6.6/series +++ b/queue-6.6/series @@ -162,3 +162,4 @@ ring-buffer-fix-writing-to-the-buffer-with-max_data_size.patch ring-buffer-fix-a-race-in-rb_time_cmpxchg-for-32-bit-archs.patch ring-buffer-do-not-try-to-put-back-write_stamp.patch ring-buffer-have-rb_time_cmpxchg-set-the-msb-counter-too.patch +x86-speculation-objtool-use-absolute-relocations-for-annotations.patch diff --git a/queue-6.6/x86-speculation-objtool-use-absolute-relocations-for-annotations.patch b/queue-6.6/x86-speculation-objtool-use-absolute-relocations-for-annotations.patch new file mode 100644 index 00000000000..b9b8df411a8 --- /dev/null +++ b/queue-6.6/x86-speculation-objtool-use-absolute-relocations-for-annotations.patch @@ -0,0 +1,131 @@ +From b8ec60e1186cdcfce41e7db4c827cb107e459002 Mon Sep 17 00:00:00 2001 +From: Fangrui Song +Date: Tue, 19 Sep 2023 17:17:28 -0700 +Subject: x86/speculation, objtool: Use absolute relocations for annotations + +From: Fangrui Song + +commit b8ec60e1186cdcfce41e7db4c827cb107e459002 upstream. + +.discard.retpoline_safe sections do not have the SHF_ALLOC flag. These +sections referencing text sections' STT_SECTION symbols with PC-relative +relocations like R_386_PC32 [0] is conceptually not suitable. Newer +LLD will report warnings for REL relocations even for relocatable links [1]: + + ld.lld: warning: vmlinux.a(drivers/i2c/busses/i2c-i801.o):(.discard.retpoline_safe+0x120): has non-ABS relocation R_386_PC32 against symbol '' + +Switch to absolute relocations instead, which indicate link-time +addresses. In a relocatable link, these addresses are also output +section offsets, used by checks in tools/objtool/check.c. When linking +vmlinux, these .discard.* sections will be discarded, therefore it is +not a problem that R_X86_64_32 cannot represent a kernel address. + +Alternatively, we could set the SHF_ALLOC flag for .discard.* sections, +but I think non-SHF_ALLOC for sections to be discarded makes more sense. + +Note: if we decide to never support REL architectures (e.g. arm, i386), +we can utilize R_*_NONE relocations (.reloc ., BFD_RELOC_NONE, sym), +making .discard.* sections zero-sized. That said, the section content +waste is 4 bytes per entry, much smaller than sizeof(Elf{32,64}_Rel). + + [0] commit 1c0c1faf5692 ("objtool: Use relative pointers for annotations") + [1] https://github.com/ClangBuiltLinux/linux/issues/1937 + +Signed-off-by: Fangrui Song +Signed-off-by: Ingo Molnar +Acked-by: Peter Zijlstra (Intel) +Cc: Josh Poimboeuf +Link: https://lore.kernel.org/r/20230920001728.1439947-1-maskray@google.com +Cc: Nathan Chancellor +Signed-off-by: Greg Kroah-Hartman +--- + arch/x86/include/asm/alternative.h | 4 ++-- + arch/x86/include/asm/nospec-branch.h | 4 ++-- + include/linux/objtool.h | 10 +++++----- + 3 files changed, 9 insertions(+), 9 deletions(-) + +--- a/arch/x86/include/asm/alternative.h ++++ b/arch/x86/include/asm/alternative.h +@@ -58,7 +58,7 @@ + #define ANNOTATE_IGNORE_ALTERNATIVE \ + "999:\n\t" \ + ".pushsection .discard.ignore_alts\n\t" \ +- ".long 999b - .\n\t" \ ++ ".long 999b\n\t" \ + ".popsection\n\t" + + /* +@@ -352,7 +352,7 @@ static inline int alternatives_text_rese + .macro ANNOTATE_IGNORE_ALTERNATIVE + .Lannotate_\@: + .pushsection .discard.ignore_alts +- .long .Lannotate_\@ - . ++ .long .Lannotate_\@ + .popsection + .endm + +--- a/arch/x86/include/asm/nospec-branch.h ++++ b/arch/x86/include/asm/nospec-branch.h +@@ -196,7 +196,7 @@ + .macro ANNOTATE_RETPOLINE_SAFE + .Lhere_\@: + .pushsection .discard.retpoline_safe +- .long .Lhere_\@ - . ++ .long .Lhere_\@ + .popsection + .endm + +@@ -334,7 +334,7 @@ + #define ANNOTATE_RETPOLINE_SAFE \ + "999:\n\t" \ + ".pushsection .discard.retpoline_safe\n\t" \ +- ".long 999b - .\n\t" \ ++ ".long 999b\n\t" \ + ".popsection\n\t" + + typedef u8 retpoline_thunk_t[RETPOLINE_THUNK_SIZE]; +--- a/include/linux/objtool.h ++++ b/include/linux/objtool.h +@@ -48,13 +48,13 @@ + #define ANNOTATE_NOENDBR \ + "986: \n\t" \ + ".pushsection .discard.noendbr\n\t" \ +- ".long 986b - .\n\t" \ ++ ".long 986b\n\t" \ + ".popsection\n\t" + + #define ASM_REACHABLE \ + "998:\n\t" \ + ".pushsection .discard.reachable\n\t" \ +- ".long 998b - .\n\t" \ ++ ".long 998b\n\t" \ + ".popsection\n\t" + + #else /* __ASSEMBLY__ */ +@@ -66,7 +66,7 @@ + #define ANNOTATE_INTRA_FUNCTION_CALL \ + 999: \ + .pushsection .discard.intra_function_calls; \ +- .long 999b - .; \ ++ .long 999b; \ + .popsection; + + /* +@@ -118,7 +118,7 @@ + .macro ANNOTATE_NOENDBR + .Lhere_\@: + .pushsection .discard.noendbr +- .long .Lhere_\@ - . ++ .long .Lhere_\@ + .popsection + .endm + +@@ -142,7 +142,7 @@ + .macro REACHABLE + .Lhere_\@: + .pushsection .discard.reachable +- .long .Lhere_\@ - . ++ .long .Lhere_\@ + .popsection + .endm +