Drop bits 63:32 of the base and/or index GPRs when calculating the
effective address of a VMX instruction memory operand.  Outside of 64-bit
mode, memory encodings are strictly limited to E*X and below.

Fixes: 064aea774768 ("KVM: nVMX: Decoding memory operands of VMX instructions")
Cc: sta...@vger.kernel.org
Signed-off-by: Sean Christopherson <sea...@google.com>
---
 arch/x86/kvm/vmx/nested.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/arch/x86/kvm/vmx/nested.c b/arch/x86/kvm/vmx/nested.c
index d6c892ea551c..a02d8744ca66 100644
--- a/arch/x86/kvm/vmx/nested.c
+++ b/arch/x86/kvm/vmx/nested.c
@@ -4601,9 +4601,9 @@ int get_vmx_mem_address(struct kvm_vcpu *vcpu, unsigned 
long exit_qualification,
        else if (addr_size == 0)
                off = (gva_t)sign_extend64(off, 15);
        if (base_is_valid)
-               off += kvm_register_read(vcpu, base_reg);
+               off += kvm_register_readl(vcpu, base_reg);
        if (index_is_valid)
-               off += kvm_register_read(vcpu, index_reg) << scaling;
+               off += kvm_register_readl(vcpu, index_reg) << scaling;
        vmx_get_segment(vcpu, &s, seg_reg);
 
        /*
-- 
2.30.0.478.g8a0d178c01-goog

Reply via email to