public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
To: linux-kernel@vger.kernel.org
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	stable@vger.kernel.org,
	Linus Torvalds <torvalds@linux-foundation.org>,
	Paolo Bonzini <pbonzini@redhat.com>
Subject: [PATCH 5.18 66/70] KVM: emulate: do not adjust size of fastop and setcc subroutines
Date: Fri, 22 Jul 2022 11:08:01 +0200	[thread overview]
Message-ID: <20220722090654.623871753@linuxfoundation.org> (raw)
In-Reply-To: <20220722090650.665513668@linuxfoundation.org>

From: Paolo Bonzini <pbonzini@redhat.com>

commit 79629181607e801c0b41b8790ac4ee2eb5d7bc3e upstream.

Instead of doing complicated calculations to find the size of the subroutines
(which are even more complicated because they need to be stringified into
an asm statement), just hardcode to 16.

It is less dense for a few combinations of IBT/SLS/retbleed, but it has
the advantage of being really simple.

Cc: stable@vger.kernel.org # 5.15.x: 84e7051c0bc1: x86/kvm: fix FASTOP_SIZE when return thunks are enabled
Cc: stable@vger.kernel.org
Suggested-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 arch/x86/kvm/emulate.c |   17 +++++++----------
 1 file changed, 7 insertions(+), 10 deletions(-)

--- a/arch/x86/kvm/emulate.c
+++ b/arch/x86/kvm/emulate.c
@@ -189,13 +189,6 @@
 #define X8(x...) X4(x), X4(x)
 #define X16(x...) X8(x), X8(x)
 
-#define NR_FASTOP	(ilog2(sizeof(ulong)) + 1)
-#define RET_LENGTH	(1 + (4 * IS_ENABLED(CONFIG_RETHUNK)) + \
-			 IS_ENABLED(CONFIG_SLS))
-#define FASTOP_LENGTH	(ENDBR_INSN_SIZE + 7 + RET_LENGTH)
-#define FASTOP_SIZE	(8 << ((FASTOP_LENGTH > 8) & 1) << ((FASTOP_LENGTH > 16) & 1))
-static_assert(FASTOP_LENGTH <= FASTOP_SIZE);
-
 struct opcode {
 	u64 flags;
 	u8 intercept;
@@ -310,9 +303,15 @@ static void invalidate_registers(struct
  * Moreover, they are all exactly FASTOP_SIZE bytes long, so functions for
  * different operand sizes can be reached by calculation, rather than a jump
  * table (which would be bigger than the code).
+ *
+ * The 16 byte alignment, considering 5 bytes for the RET thunk, 3 for ENDBR
+ * and 1 for the straight line speculation INT3, leaves 7 bytes for the
+ * body of the function.  Currently none is larger than 4.
  */
 static int fastop(struct x86_emulate_ctxt *ctxt, fastop_t fop);
 
+#define FASTOP_SIZE	16
+
 #define __FOP_FUNC(name) \
 	".align " __stringify(FASTOP_SIZE) " \n\t" \
 	".type " name ", @function \n\t" \
@@ -446,9 +445,7 @@ static int fastop(struct x86_emulate_ctx
  * RET | JMP __x86_return_thunk	[1,5 bytes; CONFIG_RETHUNK]
  * INT3				[1 byte; CONFIG_SLS]
  */
-#define SETCC_LENGTH	(ENDBR_INSN_SIZE + 3 + RET_LENGTH)
-#define SETCC_ALIGN	(4 << ((SETCC_LENGTH > 4) & 1) << ((SETCC_LENGTH > 8) & 1))
-static_assert(SETCC_LENGTH <= SETCC_ALIGN);
+#define SETCC_ALIGN	16
 
 #define FOP_SETCC(op) \
 	".align " __stringify(SETCC_ALIGN) " \n\t" \



  parent reply	other threads:[~2022-07-22  9:17 UTC|newest]

Thread overview: 81+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-07-22  9:06 [PATCH 5.18 00/70] 5.18.14-rc1 review Greg Kroah-Hartman
2022-07-22  9:06 ` [PATCH 5.18 01/70] x86/traps: Use pt_regs directly in fixup_bad_iret() Greg Kroah-Hartman
2022-07-22  9:06 ` [PATCH 5.18 02/70] x86/entry: Switch the stack after error_entry() returns Greg Kroah-Hartman
2022-07-22  9:06 ` [PATCH 5.18 03/70] x86/entry: Move PUSH_AND_CLEAR_REGS out of error_entry() Greg Kroah-Hartman
2022-07-22  9:06 ` [PATCH 5.18 04/70] x86/entry: Dont call error_entry() for XENPV Greg Kroah-Hartman
2022-07-22  9:07 ` [PATCH 5.18 05/70] x86/entry: Remove skip_r11rcx Greg Kroah-Hartman
2022-07-22  9:07 ` [PATCH 5.18 06/70] x86/kvm/vmx: Make noinstr clean Greg Kroah-Hartman
2022-07-22  9:07 ` [PATCH 5.18 07/70] x86/cpufeatures: Move RETPOLINE flags to word 11 Greg Kroah-Hartman
2022-07-22  9:07 ` [PATCH 5.18 08/70] x86/retpoline: Cleanup some #ifdefery Greg Kroah-Hartman
2022-07-22  9:07 ` [PATCH 5.18 09/70] x86/retpoline: Swizzle retpoline thunk Greg Kroah-Hartman
2022-07-22  9:07 ` [PATCH 5.18 10/70] x86/retpoline: Use -mfunction-return Greg Kroah-Hartman
2022-07-22  9:07 ` [PATCH 5.18 11/70] x86: Undo return-thunk damage Greg Kroah-Hartman
2022-07-22  9:07 ` [PATCH 5.18 12/70] x86,objtool: Create .return_sites Greg Kroah-Hartman
2022-07-22  9:07 ` [PATCH 5.18 13/70] objtool: skip non-text sections when adding return-thunk sites Greg Kroah-Hartman
2022-07-25  5:44   ` Jiri Slaby
2022-07-25  8:37     ` Greg Kroah-Hartman
2022-07-25 11:49     ` Thadeu Lima de Souza Cascardo
2022-07-22  9:07 ` [PATCH 5.18 14/70] x86,static_call: Use alternative RET encoding Greg Kroah-Hartman
2022-07-22  9:07 ` [PATCH 5.18 15/70] x86/ftrace: " Greg Kroah-Hartman
2022-07-22  9:07 ` [PATCH 5.18 16/70] x86/bpf: " Greg Kroah-Hartman
2022-07-22  9:07 ` [PATCH 5.18 17/70] x86/kvm: Fix SETcc emulation for return thunks Greg Kroah-Hartman
2022-07-22  9:07 ` [PATCH 5.18 18/70] x86/vsyscall_emu/64: Dont use RET in vsyscall emulation Greg Kroah-Hartman
2022-07-22  9:07 ` [PATCH 5.18 19/70] x86/sev: Avoid using __x86_return_thunk Greg Kroah-Hartman
2022-07-22  9:07 ` [PATCH 5.18 20/70] x86: Use return-thunk in asm code Greg Kroah-Hartman
2022-07-22  9:07 ` [PATCH 5.18 21/70] x86/entry: Avoid very early RET Greg Kroah-Hartman
2022-07-22  9:07 ` [PATCH 5.18 22/70] objtool: Treat .text.__x86.* as noinstr Greg Kroah-Hartman
2022-07-22  9:07 ` [PATCH 5.18 23/70] x86: Add magic AMD return-thunk Greg Kroah-Hartman
2022-07-22  9:07 ` [PATCH 5.18 24/70] x86/bugs: Report AMD retbleed vulnerability Greg Kroah-Hartman
2022-07-22  9:07 ` [PATCH 5.18 25/70] x86/bugs: Add AMD retbleed= boot parameter Greg Kroah-Hartman
2022-07-22  9:07 ` [PATCH 5.18 26/70] x86/bugs: Enable STIBP for JMP2RET Greg Kroah-Hartman
2022-07-22  9:07 ` [PATCH 5.18 27/70] x86/bugs: Keep a per-CPU IA32_SPEC_CTRL value Greg Kroah-Hartman
2022-07-22  9:07 ` [PATCH 5.18 28/70] x86/entry: Add kernel IBRS implementation Greg Kroah-Hartman
2022-07-22  9:07 ` [PATCH 5.18 29/70] x86/bugs: Optimize SPEC_CTRL MSR writes Greg Kroah-Hartman
2022-07-22  9:07 ` [PATCH 5.18 30/70] x86/speculation: Add spectre_v2=ibrs option to support Kernel IBRS Greg Kroah-Hartman
2022-07-22  9:07 ` [PATCH 5.18 31/70] x86/bugs: Split spectre_v2_select_mitigation() and spectre_v2_user_select_mitigation() Greg Kroah-Hartman
2022-07-22  9:07 ` [PATCH 5.18 32/70] x86/bugs: Report Intel retbleed vulnerability Greg Kroah-Hartman
2022-07-22  9:07 ` [PATCH 5.18 33/70] intel_idle: Disable IBRS during long idle Greg Kroah-Hartman
2022-07-22  9:07 ` [PATCH 5.18 34/70] objtool: Update Retpoline validation Greg Kroah-Hartman
2022-07-22  9:07 ` [PATCH 5.18 35/70] x86/xen: Rename SYS* entry points Greg Kroah-Hartman
2022-07-22  9:07 ` [PATCH 5.18 36/70] x86/xen: Add UNTRAIN_RET Greg Kroah-Hartman
2022-07-22  9:07 ` [PATCH 5.18 37/70] x86/bugs: Add retbleed=ibpb Greg Kroah-Hartman
2022-07-22  9:07 ` [PATCH 5.18 38/70] x86/bugs: Do IBPB fallback check only once Greg Kroah-Hartman
2022-07-22  9:07 ` [PATCH 5.18 39/70] objtool: Add entry UNRET validation Greg Kroah-Hartman
2022-07-22  9:07 ` [PATCH 5.18 40/70] x86/cpu/amd: Add Spectral Chicken Greg Kroah-Hartman
2022-07-22  9:07 ` [PATCH 5.18 41/70] x86/speculation: Fix RSB filling with CONFIG_RETPOLINE=n Greg Kroah-Hartman
2022-07-22  9:07 ` [PATCH 5.18 42/70] x86/speculation: Fix firmware entry SPEC_CTRL handling Greg Kroah-Hartman
2022-07-22  9:07 ` [PATCH 5.18 43/70] x86/speculation: Fix SPEC_CTRL write on SMT state change Greg Kroah-Hartman
2022-07-22  9:07 ` [PATCH 5.18 44/70] x86/speculation: Use cached host SPEC_CTRL value for guest entry/exit Greg Kroah-Hartman
2022-07-22  9:07 ` [PATCH 5.18 45/70] x86/speculation: Remove x86_spec_ctrl_mask Greg Kroah-Hartman
2022-07-22  9:07 ` [PATCH 5.18 46/70] objtool: Re-add UNWIND_HINT_{SAVE_RESTORE} Greg Kroah-Hartman
2022-07-22  9:07 ` [PATCH 5.18 47/70] KVM: VMX: Flatten __vmx_vcpu_run() Greg Kroah-Hartman
2022-07-22  9:07 ` [PATCH 5.18 48/70] KVM: VMX: Convert launched argument to flags Greg Kroah-Hartman
2022-07-22  9:07 ` [PATCH 5.18 49/70] KVM: VMX: Prevent guest RSB poisoning attacks with eIBRS Greg Kroah-Hartman
2022-07-22  9:07 ` [PATCH 5.18 50/70] KVM: VMX: Fix IBRS handling after vmexit Greg Kroah-Hartman
2022-07-22  9:07 ` [PATCH 5.18 51/70] x86/speculation: Fill RSB on vmexit for IBRS Greg Kroah-Hartman
2022-07-22  9:07 ` [PATCH 5.18 52/70] KVM: VMX: Prevent RSB underflow before vmenter Greg Kroah-Hartman
2022-07-22  9:07 ` [PATCH 5.18 53/70] x86/common: Stamp out the stepping madness Greg Kroah-Hartman
2022-07-22  9:07 ` [PATCH 5.18 54/70] x86/cpu/amd: Enumerate BTC_NO Greg Kroah-Hartman
2022-07-22  9:07 ` [PATCH 5.18 55/70] x86/retbleed: Add fine grained Kconfig knobs Greg Kroah-Hartman
2022-07-22  9:07 ` [PATCH 5.18 56/70] x86/bugs: Add Cannon lake to RETBleed affected CPU list Greg Kroah-Hartman
2022-07-22  9:07 ` [PATCH 5.18 57/70] x86/entry: Move PUSH_AND_CLEAR_REGS() back into error_entry Greg Kroah-Hartman
2022-07-22  9:07 ` [PATCH 5.18 58/70] x86/bugs: Do not enable IBPB-on-entry when IBPB is not supported Greg Kroah-Hartman
2022-07-22  9:07 ` [PATCH 5.18 59/70] x86/kexec: Disable RET on kexec Greg Kroah-Hartman
2022-07-22  9:07 ` [PATCH 5.18 60/70] x86/speculation: Disable RRSBA behavior Greg Kroah-Hartman
2022-07-22  9:07 ` [PATCH 5.18 61/70] x86/static_call: Serialize __static_call_fixup() properly Greg Kroah-Hartman
2022-07-22  9:07 ` [PATCH 5.18 62/70] x86/asm/32: Fix ANNOTATE_UNRET_SAFE use on 32-bit Greg Kroah-Hartman
2022-07-22  9:07 ` [PATCH 5.18 63/70] x86/speculation: Use DECLARE_PER_CPU for x86_spec_ctrl_current Greg Kroah-Hartman
2022-07-22  9:07 ` [PATCH 5.18 64/70] efi/x86: use naked RET on mixed mode call wrapper Greg Kroah-Hartman
2022-07-22  9:08 ` [PATCH 5.18 65/70] x86/kvm: fix FASTOP_SIZE when return thunks are enabled Greg Kroah-Hartman
2022-07-22  9:08 ` Greg Kroah-Hartman [this message]
2022-07-22  9:08 ` [PATCH 5.18 67/70] tools arch x86: Sync the msr-index.h copy with the kernel sources Greg Kroah-Hartman
2022-07-22  9:08 ` [PATCH 5.18 68/70] tools headers cpufeatures: Sync " Greg Kroah-Hartman
2022-07-22  9:08 ` [PATCH 5.18 69/70] x86/bugs: Remove apostrophe typo Greg Kroah-Hartman
2022-07-22  9:08 ` [PATCH 5.18 70/70] um: Add missing apply_returns() Greg Kroah-Hartman
2022-07-22 18:37 ` [PATCH 5.18 00/70] 5.18.14-rc1 review Florian Fainelli
2022-07-22 18:55 ` Ron Economos
2022-07-22 19:33 ` Naresh Kamboju
2022-07-22 21:59 ` Guenter Roeck
2022-07-23  2:02 ` Bagas Sanjaya
2022-07-23  8:39 ` Rudi Heitbaum
2022-07-23  8:53 ` Sudip Mukherjee (Codethink)

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=20220722090654.623871753@linuxfoundation.org \
    --to=gregkh@linuxfoundation.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=pbonzini@redhat.com \
    --cc=stable@vger.kernel.org \
    --cc=torvalds@linux-foundation.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