Borislav Petkov 7c39b9
From: Paolo Bonzini <pbonzini@redhat.com>
Borislav Petkov 7c39b9
Date: Fri, 15 Jul 2022 07:34:55 -0400
Borislav Petkov 7c39b9
Subject: KVM: emulate: do not adjust size of fastop and setcc subroutines
Borislav Petkov 7c39b9
Git-commit: 79629181607e801c0b41b8790ac4ee2eb5d7bc3e
Borislav Petkov 7c39b9
Patch-mainline: v5.19-rc7
Borislav Petkov 7c39b9
References: bsc#1201930
Borislav Petkov 7c39b9
Borislav Petkov 7c39b9
Instead of doing complicated calculations to find the size of the subroutines
Borislav Petkov 7c39b9
(which are even more complicated because they need to be stringified into
Borislav Petkov 7c39b9
an asm statement), just hardcode to 16.
Borislav Petkov 7c39b9
Borislav Petkov 7c39b9
It is less dense for a few combinations of IBT/SLS/retbleed, but it has
Borislav Petkov 7c39b9
the advantage of being really simple.
Borislav Petkov 7c39b9
Borislav Petkov 7c39b9
Cc: stable@vger.kernel.org # 5.15.x: 84e7051c0bc1: x86/kvm: fix FASTOP_SIZE when return thunks are enabled
Borislav Petkov 7c39b9
Cc: stable@vger.kernel.org
Borislav Petkov 7c39b9
Suggested-by: Linus Torvalds <torvalds@linux-foundation.org>
Borislav Petkov 7c39b9
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Borislav Petkov 7c39b9
Acked-by: Borislav Petkov <bp@suse.de>
Borislav Petkov 7c39b9
---
Borislav Petkov 7c39b9
 arch/x86/kvm/emulate.c |   14 +++++++-------
Borislav Petkov 7c39b9
 1 file changed, 7 insertions(+), 7 deletions(-)
Borislav Petkov 7c39b9
Borislav Petkov 7c39b9
--- a/arch/x86/kvm/emulate.c
Borislav Petkov 7c39b9
+++ b/arch/x86/kvm/emulate.c
Borislav Petkov 7c39b9
@@ -189,9 +189,6 @@
Borislav Petkov 7c39b9
 #define X8(x...) X4(x), X4(x)
Borislav Petkov 7c39b9
 #define X16(x...) X8(x), X8(x)
Borislav Petkov 7c39b9
 
Borislav Petkov 7c39b9
-#define NR_FASTOP (ilog2(sizeof(ulong)) + 1)
Borislav Petkov 7c39b9
-#define FASTOP_SIZE 8
Borislav Petkov 7c39b9
-
Borislav Petkov 7c39b9
 /*
Borislav Petkov 7c39b9
  * fastop functions have a special calling convention:
Borislav Petkov 7c39b9
  *
Borislav Petkov 7c39b9
@@ -207,8 +204,14 @@
Borislav Petkov 7c39b9
  *
Borislav Petkov 7c39b9
  * fastop functions are declared as taking a never-defined fastop parameter,
Borislav Petkov 7c39b9
  * so they can't be called from C directly.
Borislav Petkov 7c39b9
+ *
Borislav Petkov 7c39b9
+ * The 16 byte alignment, considering 5 bytes for the RET thunk, 3 for ENDBR
Borislav Petkov 7c39b9
+ * and 1 for the straight line speculation INT3, leaves 7 bytes for the
Borislav Petkov 7c39b9
+ * body of the function.  Currently none is larger than 4.
Borislav Petkov 7c39b9
  */
Borislav Petkov 7c39b9
 
Borislav Petkov 7c39b9
+#define FASTOP_SIZE	16
Borislav Petkov 7c39b9
+
Borislav Petkov 7c39b9
 struct fastop;
Borislav Petkov 7c39b9
 
Borislav Petkov 7c39b9
 struct opcode {
Borislav Petkov 7c39b9
@@ -434,10 +437,7 @@ static int fastop(struct x86_emulate_ctx
Borislav Petkov 7c39b9
  * RET | JMP __x86_return_thunk	[1,5 bytes; CONFIG_RETPOLINE]
Borislav Petkov 7c39b9
  * INT3				[1 byte; CONFIG_SLS]
Borislav Petkov 7c39b9
  */
Borislav Petkov 7c39b9
-#define RET_LENGTH	(1 + (4 * IS_ENABLED(CONFIG_RETPOLINE)) + \
Borislav Petkov 7c39b9
-			 IS_ENABLED(CONFIG_SLS))
Borislav Petkov 7c39b9
-#define SETCC_LENGTH	(3 + RET_LENGTH)
Borislav Petkov 7c39b9
-#define SETCC_ALIGN	(4 << ((SETCC_LENGTH > 4) & 1) << ((SETCC_LENGTH > 8) & 1))
Borislav Petkov 7c39b9
+#define SETCC_ALIGN	16
Borislav Petkov 7c39b9
 
Borislav Petkov 7c39b9
 /* Special case for SETcc - 1 instruction per cc */
Borislav Petkov 7c39b9
 #define FOP_SETCC(op) \