]> xenbits.xensource.com Git - people/royger/xen.git/commitdiff
x86/vvmx: Fixes to VMWRITE emulation
authorAndrew Cooper <andrew.cooper3@citrix.com>
Thu, 1 Nov 2018 17:37:48 +0000 (17:37 +0000)
committerAndrew Cooper <andrew.cooper3@citrix.com>
Fri, 23 Nov 2018 13:46:59 +0000 (13:46 +0000)
 * Don't assume that decode_vmx_inst() always returns X86EMUL_EXCEPTION.
 * The okay boolean is never written, making the else case dead.

Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
Reviewed-by: Roger Pau Monné <roger.pau@citrix.com>
Reviewed-by: Sergey Dyasli <sergey.dyasli@citrix.com>
Acked-by: Kevin Tian <kevin.tian@intel.com>
xen/arch/x86/hvm/vmx/vvmx.c

index 5daab82dc05391e91da04c48040769c0ac36d52e..41c4e2fb82b1896aa19326307ee3f4b37b71fc08 100644 (file)
@@ -1872,11 +1872,12 @@ static int nvmx_handle_vmwrite(struct cpu_user_regs *regs)
     struct vmx_inst_decoded decode;
     unsigned long operand; 
     u64 vmcs_encoding;
-    bool_t okay = 1;
     enum vmx_insn_errno err;
+    int rc;
 
-    if ( decode_vmx_inst(regs, &decode, &operand) != X86EMUL_OKAY )
-        return X86EMUL_EXCEPTION;
+    rc = decode_vmx_inst(regs, &decode, &operand);
+    if ( rc != X86EMUL_OKAY )
+        return rc;
 
     if ( !vvmcx_valid(v) )
     {
@@ -1905,10 +1906,7 @@ static int nvmx_handle_vmwrite(struct cpu_user_regs *regs)
         break;
     }
 
-    if ( okay )
-        vmsucceed(regs);
-    else
-        vmfail_valid(regs, VMX_INSN_UNSUPPORTED_VMCS_COMPONENT);
+    vmsucceed(regs);
 
     return X86EMUL_OKAY;
 }