aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--arch/x86/kvm/vmx.c15
1 files changed, 7 insertions, 8 deletions
diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c
index e30da9a2430c..548bef5359e6 100644
--- a/arch/x86/kvm/vmx.c
+++ b/arch/x86/kvm/vmx.c
@@ -8480,21 +8480,20 @@ static int handle_vmptrld(struct kvm_vcpu *vcpu)
8480/* Emulate the VMPTRST instruction */ 8480/* Emulate the VMPTRST instruction */
8481static int handle_vmptrst(struct kvm_vcpu *vcpu) 8481static int handle_vmptrst(struct kvm_vcpu *vcpu)
8482{ 8482{
8483 unsigned long exit_qualification = vmcs_readl(EXIT_QUALIFICATION); 8483 unsigned long exit_qual = vmcs_readl(EXIT_QUALIFICATION);
8484 u32 vmx_instruction_info = vmcs_read32(VMX_INSTRUCTION_INFO); 8484 u32 instr_info = vmcs_read32(VMX_INSTRUCTION_INFO);
8485 gva_t vmcs_gva; 8485 gpa_t current_vmptr = to_vmx(vcpu)->nested.current_vmptr;
8486 struct x86_exception e; 8486 struct x86_exception e;
8487 gva_t gva;
8487 8488
8488 if (!nested_vmx_check_permission(vcpu)) 8489 if (!nested_vmx_check_permission(vcpu))
8489 return 1; 8490 return 1;
8490 8491
8491 if (get_vmx_mem_address(vcpu, exit_qualification, 8492 if (get_vmx_mem_address(vcpu, exit_qual, instr_info, true, &gva))
8492 vmx_instruction_info, true, &vmcs_gva))
8493 return 1; 8493 return 1;
8494 /* *_system ok, nested_vmx_check_permission has verified cpl=0 */ 8494 /* *_system ok, nested_vmx_check_permission has verified cpl=0 */
8495 if (kvm_write_guest_virt_system(vcpu, vmcs_gva, 8495 if (kvm_write_guest_virt_system(vcpu, gva, (void *)&current_vmptr,
8496 (void *)&to_vmx(vcpu)->nested.current_vmptr, 8496 sizeof(gpa_t), &e)) {
8497 sizeof(u64), &e)) {
8498 kvm_inject_page_fault(vcpu, &e); 8497 kvm_inject_page_fault(vcpu, &e);
8499 return 1; 8498 return 1;
8500 } 8499 }