5.10.191-rc1 review
Subsystems (2)
Greg Kroah-Hartman
maintainerPATCH 133/135 x86/retpoline,kprobes: Fix position of thunk sections with CONFIG_LTO_CLANG
In reply to Greg Kroah-HartmanFrom: Petr Pavlu <[email protected]>
commit 79cd2a11224eab86d6673fe8a11d2046ae9d2757 upstream.
The linker script arch/x86/kernel/vmlinux.lds.S matches the thunk sections ".text.__x86.*" from arch/x86/lib/retpoline.S as follows:
.text {
[...]
TEXT_TEXT
[...]
__indirect_thunk_start = .;
*(.text.__x86.*)
__indirect_thunk_end = .;
[...]
}Macro TEXT_TEXT references TEXT_MAIN which normally expands to only ".text". However, with CONFIG_LTO_CLANG, TEXT_MAIN becomes ".text .text.[0-9a-zA-Z_]*" which wrongly matches also the thunk sections. The output layout is then different than expected. For instance, the currently defined range [__indirect_thunk_start, __indirect_thunk_end] becomes empty.
Prevent the problem by using ".." as the first separator, for example, ".text..__x86.indirect_thunk". This pattern is utilized by other explicit section names which start with one of the standard prefixes, such as ".text" or ".data", and that need to be individually selected in the linker script.
[ nathan: Fix conflicts with SRSO and fold in fix issue brought up by
Andrew Cooper in post-review:
https://lore.kernel.org/[email protected] ]
--- arch/x86/kernel/vmlinux.lds.S | 8 ++++---- arch/x86/lib/retpoline.S | 8 ++++---- tools/objtool/check.c | 2 +- 3 files changed, 9 insertions(+), 9 deletions(-)
arch/x86/kernel/vmlinux.lds.S +4 -4
@@ -134,7 +134,7 @@ SECTIONS KPROBES_TEXT ALIGN_ENTRY_TEXT_BEGIN #ifdef CONFIG_CPU_SRSO - *(.text.__x86.rethunk_untrain) + *(.text..__x86.rethunk_untrain) #endif ENTRY_TEXT
@@ -145,7 +145,7 @@ SECTIONS * definition. */ . = srso_alias_untrain_ret | (1 << 2) | (1 << 8) | (1 << 14) | (1 << 20); - *(.text.__x86.rethunk_safe) + *(.text..__x86.rethunk_safe) #endif ALIGN_ENTRY_TEXT_END SOFTIRQENTRY_TEXT
@@ -155,8 +155,8 @@ SECTIONS #ifdef CONFIG_RETPOLINE __indirect_thunk_start = .; - *(.text.__x86.indirect_thunk) - *(.text.__x86.return_thunk) + *(.text..__x86.indirect_thunk) + *(.text..__x86.return_thunk) __indirect_thunk_end = .; #endif } :text =0xcccc
arch/x86/lib/retpoline.S +4 -4
@@ -11,7 +11,7 @@ #include <asm/frame.h> #include <asm/nops.h> - .section .text.__x86.indirect_thunk + .section .text..__x86.indirect_thunk .macro RETPOLINE reg ANNOTATE_INTRA_FUNCTION_CALL
@@ -90,7 +90,7 @@ SYM_CODE_END(__x86_indirect_thunk_array) * As a result, srso_alias_safe_ret() becomes a safe return. */ #ifdef CONFIG_CPU_SRSO - .section .text.__x86.rethunk_untrain + .section .text..__x86.rethunk_untrain SYM_START(srso_alias_untrain_ret, SYM_L_GLOBAL, SYM_A_NONE) UNWIND_HINT_FUNC
@@ -100,7 +100,7 @@ SYM_START(srso_alias_untrain_ret, SYM_L_ SYM_FUNC_END(srso_alias_untrain_ret) __EXPORT_THUNK(srso_alias_untrain_ret) - .section .text.__x86.rethunk_safe + .section .text..__x86.rethunk_safe #else /* dummy definition for alternatives */ SYM_START(srso_alias_untrain_ret, SYM_L_GLOBAL, SYM_A_NONE)
@@ -118,7 +118,7 @@ SYM_START(srso_alias_safe_ret, SYM_L_GLO int3 SYM_FUNC_END(srso_alias_safe_ret) - .section .text.__x86.return_thunk + .section .text..__x86.return_thunk SYM_CODE_START(srso_alias_return_thunk) UNWIND_HINT_FUNC
tools/objtool/check.c +1 -1
@@ -369,7 +369,7 @@ static int decode_instructions(struct obif (!strcmp (sec->name,".noinstr.text" ) || !strcmp (sec->name,".entry.text" ) || - !strncmp (sec->name,".text.__x86." ,12 )) + !strncmp (sec->name,".text..__x86." ,13 )) sec->noinstr = true;for (offset =0 ; offset < sec->len; offset += insn->len) {
Greg Kroah-Hartman
maintainerPATCH 134/135 objtool/x86: Fixup frame-pointer vs rethunk
In reply to Greg Kroah-HartmanFrom: Peter Zijlstra <[email protected]>
commit dbf46008775516f7f25c95b7760041c286299783 upstream.
For stack-validation of a frame-pointer build, objtool validates that every CALL instruction is preceded by a frame-setup. The new SRSO return thunks violate this with their RSB stuffing trickery.
Extend the __fentry__ exception to also cover the embedded_insn case used for this. This cures:
vmlinux.o: warning: objtool: srso_untrain_ret+0xd: call without frame pointer save/setup
--- tools/objtool/check.c | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-)
tools/objtool/check.c +11 -6
@@ -2079,12 +2079,17 @@ static int decode_sections(struct objtooreturn 0 ; } -static bool is_fentry_call (struct instruction *insn) +static bool is_special_call (struct instruction *insn) { -if (insn->type ==INSN_CALL && - insn->call_dest && - insn->call_dest->fentry) -return true; +if (insn->type ==INSN_CALL ) { +struct symbol *dest = insn->call_dest; + +if (!dest) +return false; + +if (dest->fentry) +return true; + }return false; }
@@ -2958,7 +2963,7 @@ static int validate_branch(struct objtooif (ret)return ret; -if (!no_fp && func && !is_fentry_call (insn) && +if (!no_fp && func && !is_special_call (insn) && !has_valid_stack_frame (&state)) {WARN_FUNC ("call without frame pointer save/setup" , sec, insn->offset);
Greg Kroah-Hartman
maintainerPATCH 135/135 x86/srso: Correct the mitigation status when SMT is disabled
In reply to Greg Kroah-HartmanFrom: Borislav Petkov (AMD) <[email protected]>
commit 6405b72e8d17bd1875a56ae52d23ec3cd51b9d66 upstream.
Specify how is SRSO mitigated when SMT is disabled. Also, correct the SMT check for that.
--- arch/x86/kernel/cpu/bugs.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-)
arch/x86/kernel/cpu/bugs.c +2 -3
@@ -2328,8 +2328,7 @@ static void __init srso_select_mitigatio* Zen1/2 with SMT off aren't vulnerable after the right * IBPB microcode has been applied. */ -if ((boot_cpu_data.x86 <0x19 ) && - (!cpu_smt_possible () || (cpu_smt_control ==CPU_SMT_DISABLED ))) { +if (boot_cpu_data.x86 <0x19 && !cpu_smt_possible ()) {setup_force_cpu_cap (X86_FEATURE_SRSO_NO );return ; }
@@ -2619,7 +2618,7 @@ static ssize_t gds_show_state(char *buf)static ssize_t srso_show_state (char *buf) {if (boot_cpu_has (X86_FEATURE_SRSO_NO )) -return sysfs_emit (buf,"Not affected\n" ); +return sysfs_emit (buf,"Mitigation: SMT disabled\n" ); return sysfs_emit(buf, "%s%s\n", srso_strings[srso_mitigation],
Quoted 1 line · Greg Kroah-Hartman
This is the start of the stable review cycle for the 5.10.191 release.
Do you mean 5.10.192 release?
--
Alexey
Greg Kroah-Hartman
maintainerQuoted 4 lines · Alexey Khoroshilov
Quoted 1 line · Greg Kroah-Hartman
This is the start of the stable review cycle for the 5.10.191 release.
Do you mean 5.10.192 release?
Ah crap, this is what happens when I come back from a long trip where I was working on my laptop and I didn't fully sync my desktop.
Yes, you are right, I am behind a release here, let me go update my trees and push out a new -rc for this, thanks for catching it.
greg k-h