From: Peter Zijlstra <peterz@infradead.org>
To: x86@kernel.org
Cc: linux-kernel@vger.kernel.org, peterz@infradead.org,
David.Kaplan@amd.com, Andrew.Cooper3@citrix.com,
jpoimboe@kernel.org, gregkh@linuxfoundation.org,
nik.borisov@suse.com
Subject: [PATCH v2 11/11] x86/cpu: Use fancy alternatives to get rid of entry_untrain_ret()
Date: Mon, 14 Aug 2023 13:44:37 +0200 [thread overview]
Message-ID: <20230814121149.243457126@infradead.org> (raw)
In-Reply-To: <20230814114426.057251214@infradead.org>
Use the new nested alternatives to create what is effectively
ALTERNATIVE_5 and merge the dummy entry_untrain_ret stub into
UNTRAIN_RET properly.
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
---
arch/x86/include/asm/nospec-branch.h | 33 ++++++++++++++++++---------------
arch/x86/kernel/cpu/bugs.c | 1 -
arch/x86/lib/retpoline.S | 7 -------
3 files changed, 18 insertions(+), 23 deletions(-)
--- a/arch/x86/include/asm/nospec-branch.h
+++ b/arch/x86/include/asm/nospec-branch.h
@@ -272,11 +272,15 @@
.endm
#ifdef CONFIG_CPU_UNRET_ENTRY
-#define CALL_UNTRAIN_RET "call entry_untrain_ret"
+#define ALT_UNRET(old) \
+ __ALTERNATIVE(__ALTERNATIVE(__ALTERNATIVE(old, call retbleed_untrain_ret, X86_FEATURE_UNRET), \
+ call srso_untrain_ret, X86_FEATURE_SRSO), \
+ call srso_alias_untrain_ret, X86_FEATURE_SRSO_ALIAS)
#else
-#define CALL_UNTRAIN_RET ""
+#define ALT_UNRET(old) old
#endif
+
/*
* Mitigate RETBleed for AMD/Hygon Zen uarch. Requires KERNEL CR3 because the
* return thunk isn't mapped into the userspace tables (then again, AMD
@@ -292,10 +296,10 @@
#if defined(CONFIG_CPU_UNRET_ENTRY) || defined(CONFIG_CPU_IBPB_ENTRY) || \
defined(CONFIG_CALL_DEPTH_TRACKING) || defined(CONFIG_CPU_SRSO)
VALIDATE_UNRET_END
- ALTERNATIVE_3 "", \
- CALL_UNTRAIN_RET, X86_FEATURE_UNRET, \
- "call entry_ibpb", X86_FEATURE_ENTRY_IBPB, \
- __stringify(RESET_CALL_DEPTH), X86_FEATURE_CALL_DEPTH
+
+ __ALTERNATIVE(__ALTERNATIVE(ALT_UNRET(;),
+ call entry_ibpb, X86_FEATURE_ENTRY_IBPB),
+ RESET_CALL_DEPTH, X86_FEATURE_CALL_DEPTH)
#endif
.endm
@@ -303,10 +307,10 @@
#if defined(CONFIG_CPU_UNRET_ENTRY) || defined(CONFIG_CPU_IBPB_ENTRY) || \
defined(CONFIG_CALL_DEPTH_TRACKING) || defined(CONFIG_CPU_SRSO)
VALIDATE_UNRET_END
- ALTERNATIVE_3 "", \
- CALL_UNTRAIN_RET, X86_FEATURE_UNRET, \
- "call entry_ibpb", X86_FEATURE_IBPB_ON_VMEXIT, \
- __stringify(RESET_CALL_DEPTH), X86_FEATURE_CALL_DEPTH
+
+ __ALTERNATIVE(__ALTERNATIVE(ALT_UNRET(;),
+ call entry_ibpb, X86_FEATURE_IBPB_ON_VMEXIT),
+ RESET_CALL_DEPTH, X86_FEATURE_CALL_DEPTH)
#endif
.endm
@@ -314,10 +318,10 @@
#if defined(CONFIG_CPU_UNRET_ENTRY) || defined(CONFIG_CPU_IBPB_ENTRY) || \
defined(CONFIG_CALL_DEPTH_TRACKING)
VALIDATE_UNRET_END
- ALTERNATIVE_3 "", \
- CALL_UNTRAIN_RET, X86_FEATURE_UNRET, \
- "call entry_ibpb", X86_FEATURE_ENTRY_IBPB, \
- __stringify(RESET_CALL_DEPTH_FROM_CALL), X86_FEATURE_CALL_DEPTH
+
+ __ALTERNATIVE(__ALTERNATIVE(ALT_UNRET(;),
+ call entry_ibpb, X86_FEATURE_ENTRY_IBPB),
+ RESET_CALL_DEPTH_FROM_CALL, X86_FEATURE_CALL_DEPTH)
#endif
.endm
@@ -352,7 +356,6 @@ extern void retbleed_untrain_ret(void);
extern void srso_untrain_ret(void);
extern void srso_alias_untrain_ret(void);
-extern void entry_untrain_ret(void);
extern void entry_ibpb(void);
extern void (*x86_return_thunk)(void);
--- a/arch/x86/kernel/cpu/bugs.c
+++ b/arch/x86/kernel/cpu/bugs.c
@@ -2450,7 +2450,6 @@ static void __init srso_select_mitigatio
* like ftrace, static_call, etc.
*/
setup_force_cpu_cap(X86_FEATURE_RETHUNK);
- setup_force_cpu_cap(X86_FEATURE_UNRET);
if (boot_cpu_data.x86 == 0x19) {
setup_force_cpu_cap(X86_FEATURE_SRSO_ALIAS);
--- a/arch/x86/lib/retpoline.S
+++ b/arch/x86/lib/retpoline.S
@@ -277,13 +277,6 @@ SYM_CODE_START(srso_return_thunk)
ud2
SYM_CODE_END(srso_return_thunk)
-SYM_FUNC_START(entry_untrain_ret)
- ALTERNATIVE_2 "jmp retbleed_untrain_ret", \
- "jmp srso_untrain_ret", X86_FEATURE_SRSO, \
- "jmp srso_alias_untrain_ret", X86_FEATURE_SRSO_ALIAS
-SYM_FUNC_END(entry_untrain_ret)
-__EXPORT_THUNK(entry_untrain_ret)
-
SYM_CODE_START(__x86_return_thunk)
UNWIND_HINT_FUNC
ANNOTATE_NOENDBR
next prev parent reply other threads:[~2023-08-14 12:20 UTC|newest]
Thread overview: 74+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-08-14 11:44 [PATCH v2 00/11] Fix up SRSO stuff Peter Zijlstra
2023-08-14 11:44 ` [PATCH v2 01/11] x86/cpu: Fixup __x86_return_thunk Peter Zijlstra
2023-08-16 7:55 ` [tip: x86/urgent] x86/cpu: Fix __x86_return_thunk symbol type tip-bot2 for Peter Zijlstra
2023-08-14 11:44 ` [PATCH v2 02/11] x86/cpu: Fix up srso_safe_ret() and __x86_return_thunk() Peter Zijlstra
2023-08-16 7:55 ` [tip: x86/urgent] " tip-bot2 for Peter Zijlstra
2023-08-14 11:44 ` [PATCH v2 03/11] objtool/x86: Fix SRSO mess Peter Zijlstra
2023-08-14 12:54 ` Andrew.Cooper3
2023-08-16 7:55 ` [tip: x86/urgent] " tip-bot2 for Peter Zijlstra
2023-08-16 11:59 ` Peter Zijlstra
2023-08-16 20:31 ` Josh Poimboeuf
2023-08-16 22:08 ` [PATCH] objtool/x86: Fixup frame-pointer vs rethunk Peter Zijlstra
2023-08-16 22:22 ` Josh Poimboeuf
2023-08-17 8:39 ` [tip: x86/urgent] " tip-bot2 for Peter Zijlstra
2023-08-14 11:44 ` [PATCH v2 04/11] x86/alternative: Make custom return thunk unconditional Peter Zijlstra
2023-08-16 7:55 ` [tip: x86/urgent] " tip-bot2 for Peter Zijlstra
2023-08-14 11:44 ` [PATCH v2 05/11] x86/cpu: Clean up SRSO return thunk mess Peter Zijlstra
2023-08-14 13:02 ` Borislav Petkov
2023-08-14 17:48 ` Borislav Petkov
2023-08-15 21:29 ` Nathan Chancellor
2023-08-15 22:43 ` Peter Zijlstra
2023-08-16 7:38 ` Borislav Petkov
2023-08-16 14:52 ` Nathan Chancellor
2023-08-16 15:08 ` Borislav Petkov
2023-08-16 7:55 ` [tip: x86/urgent] " tip-bot2 for Peter Zijlstra
2023-08-16 18:58 ` Nathan Chancellor
2023-08-16 19:24 ` Borislav Petkov
2023-08-16 19:30 ` Nathan Chancellor
2023-08-16 19:42 ` Borislav Petkov
2023-08-16 19:57 ` Borislav Petkov
2023-08-16 21:20 ` tip-bot2 for Peter Zijlstra
2023-08-14 11:44 ` [PATCH v2 06/11] x86/cpu: Rename original retbleed methods Peter Zijlstra
2023-08-14 19:41 ` Josh Poimboeuf
2023-08-16 7:55 ` [tip: x86/urgent] " tip-bot2 for Peter Zijlstra
2023-08-16 21:20 ` tip-bot2 for Peter Zijlstra
2023-08-14 11:44 ` [PATCH v2 07/11] x86/cpu: Rename srso_(.*)_alias to srso_alias_\1 Peter Zijlstra
2023-08-16 7:55 ` [tip: x86/urgent] " tip-bot2 for Peter Zijlstra
2023-08-16 21:20 ` tip-bot2 for Peter Zijlstra
2023-08-14 11:44 ` [PATCH v2 08/11] x86/cpu: Cleanup the untrain mess Peter Zijlstra
2023-08-16 7:55 ` [tip: x86/urgent] " tip-bot2 for Peter Zijlstra
2023-08-16 21:20 ` tip-bot2 for Peter Zijlstra
2023-08-14 11:44 ` [PATCH v2 09/11] x86/cpu/kvm: Provide UNTRAIN_RET_VM Peter Zijlstra
2023-08-16 7:55 ` [tip: x86/urgent] " tip-bot2 for Peter Zijlstra
2023-08-16 21:20 ` tip-bot2 for Peter Zijlstra
2023-08-14 11:44 ` [PATCH v2 10/11] x86/alternatives: Simplify ALTERNATIVE_n() Peter Zijlstra
2023-08-15 20:49 ` Nikolay Borisov
2023-08-15 22:44 ` Peter Zijlstra
2023-09-07 8:31 ` Borislav Petkov
2023-09-07 11:09 ` Peter Zijlstra
2023-09-07 11:11 ` Peter Zijlstra
2023-09-07 11:16 ` Peter Zijlstra
2023-09-07 15:06 ` Borislav Petkov
2023-09-07 15:30 ` Borislav Petkov
2023-09-09 7:50 ` Borislav Petkov
2023-09-09 9:25 ` Peter Zijlstra
2023-09-09 9:42 ` Peter Zijlstra
2023-09-10 14:42 ` Borislav Petkov
2023-09-12 9:27 ` Peter Zijlstra
2023-09-12 9:44 ` Peter Zijlstra
2023-09-13 4:37 ` Borislav Petkov
2023-09-13 8:46 ` Peter Zijlstra
2023-09-13 14:38 ` Borislav Petkov
2023-09-13 16:14 ` Peter Zijlstra
2023-09-15 7:46 ` Peter Zijlstra
2023-09-15 7:51 ` Peter Zijlstra
2023-09-15 12:05 ` Borislav Petkov
2023-09-13 4:24 ` Borislav Petkov
2023-08-14 11:44 ` Peter Zijlstra [this message]
2023-08-14 16:44 ` [PATCH v2 00/11] Fix up SRSO stuff Borislav Petkov
2023-08-14 19:51 ` Josh Poimboeuf
2023-08-14 19:57 ` Borislav Petkov
2023-08-14 20:01 ` Josh Poimboeuf
2023-08-14 20:09 ` Borislav Petkov
2023-08-15 14:26 ` [PATCH] x86/srso: Explain the untraining sequences a bit more Borislav Petkov
2023-08-15 15:41 ` Nikolay Borisov
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20230814121149.243457126@infradead.org \
--to=peterz@infradead.org \
--cc=Andrew.Cooper3@citrix.com \
--cc=David.Kaplan@amd.com \
--cc=gregkh@linuxfoundation.org \
--cc=jpoimboe@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=nik.borisov@suse.com \
--cc=x86@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®