diff mbox series

KVM: x86/emulator: emulate movbe with operand-size prefix

Message ID 20231212095938.26731-1-julian.stecklina@cyberus-technology.de (mailing list archive)
State New, archived
Headers show
Series KVM: x86/emulator: emulate movbe with operand-size prefix | expand

Commit Message

Julian Stecklina Dec. 12, 2023, 9:59 a.m. UTC
From: Thomas Prescher <thomas.prescher@cyberus-technology.de>

The MOVBE instruction can come with an operand-size prefix (66h). In
this, case the x86 emulation code returns EMULATION_FAILED.

It turns out that em_movbe can already handle this case and all that
is missing is an entry in respective opcode tables to populate
gprefix->pfx_66.

Signed-off-by: Thomas Prescher <thomas.prescher@cyberus-technology.de>
Signed-off-by: Julian Stecklina <julian.stecklina@cyberus-technology.de>
---
 arch/x86/kvm/emulate.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

Comments

Borislav Petkov Dec. 17, 2023, 12:11 p.m. UTC | #1
On Tue, Dec 12, 2023 at 10:59:37AM +0100, Julian Stecklina wrote:
> From: Thomas Prescher <thomas.prescher@cyberus-technology.de>
> 
> The MOVBE instruction can come with an operand-size prefix (66h). In
> this, case the x86 emulation code returns EMULATION_FAILED.
> 
> It turns out that em_movbe can already handle this case and all that
> is missing is an entry in respective opcode tables to populate
> gprefix->pfx_66.
> 
> Signed-off-by: Thomas Prescher <thomas.prescher@cyberus-technology.de>
> Signed-off-by: Julian Stecklina <julian.stecklina@cyberus-technology.de>
> ---
>  arch/x86/kvm/emulate.c | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/arch/x86/kvm/emulate.c b/arch/x86/kvm/emulate.c
> index 2673cd5c46cb..08013e158b2d 100644
> --- a/arch/x86/kvm/emulate.c
> +++ b/arch/x86/kvm/emulate.c
> @@ -4502,11 +4502,11 @@ static const struct instr_dual instr_dual_0f_38_f1 = {
>  };
>  
>  static const struct gprefix three_byte_0f_38_f0 = {
> -	ID(0, &instr_dual_0f_38_f0), N, N, N
> +	ID(0, &instr_dual_0f_38_f0), ID(0, &instr_dual_0f_38_f0), N, N
>  };
>  
>  static const struct gprefix three_byte_0f_38_f1 = {
> -	ID(0, &instr_dual_0f_38_f1), N, N, N
> +	ID(0, &instr_dual_0f_38_f1), ID(0, &instr_dual_0f_38_f1), N, N
>  };
>  
>  /*
> -- 

Acked-by: Borislav Petkov (AMD) <bp@alien8.de>
Sean Christopherson Feb. 9, 2024, 12:22 a.m. UTC | #2
On Tue, 12 Dec 2023 10:59:37 +0100, Julian Stecklina wrote:
> The MOVBE instruction can come with an operand-size prefix (66h). In
> this, case the x86 emulation code returns EMULATION_FAILED.
> 
> It turns out that em_movbe can already handle this case and all that
> is missing is an entry in respective opcode tables to populate
> gprefix->pfx_66.
> 
> [...]

Applied to kvm-x86 misc, thanks!  I have a KUT testcase for this now, I'll post
it at some point.

[1/1] KVM: x86/emulator: emulate movbe with operand-size prefix
      https://github.com/kvm-x86/linux/commit/03f6298c7cf6

--
https://github.com/kvm-x86/linux/tree/next
diff mbox series

Patch

diff --git a/arch/x86/kvm/emulate.c b/arch/x86/kvm/emulate.c
index 2673cd5c46cb..08013e158b2d 100644
--- a/arch/x86/kvm/emulate.c
+++ b/arch/x86/kvm/emulate.c
@@ -4502,11 +4502,11 @@  static const struct instr_dual instr_dual_0f_38_f1 = {
 };
 
 static const struct gprefix three_byte_0f_38_f0 = {
-	ID(0, &instr_dual_0f_38_f0), N, N, N
+	ID(0, &instr_dual_0f_38_f0), ID(0, &instr_dual_0f_38_f0), N, N
 };
 
 static const struct gprefix three_byte_0f_38_f1 = {
-	ID(0, &instr_dual_0f_38_f1), N, N, N
+	ID(0, &instr_dual_0f_38_f1), ID(0, &instr_dual_0f_38_f1), N, N
 };
 
 /*