|
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) \
|