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