bool_t launched;
struct vcpu *v = current;
struct nestedvmx *nvmx = &vcpu_2_nvmx(v);
+ unsigned long intr_shadow;
int rc = vmx_inst_check_privilege(regs, 0);
if ( rc != X86EMUL_OKAY )
return X86EMUL_OKAY;
}
+ __vmread(GUEST_INTERRUPTIBILITY_INFO, &intr_shadow);
+ if ( intr_shadow & VMX_INTR_SHADOW_MOV_SS )
+ {
+ vmfail_valid(regs, VMX_INSN_VMENTRY_BLOCKED_BY_MOV_SS);
+ return X86EMUL_OKAY;
+ }
+
launched = vvmcs_launched(&nvmx->launched_list,
PFN_DOWN(v->arch.hvm_vmx.vmcs_shadow_maddr));
if ( !launched )
bool_t launched;
struct vcpu *v = current;
struct nestedvmx *nvmx = &vcpu_2_nvmx(v);
+ unsigned long intr_shadow;
int rc = vmx_inst_check_privilege(regs, 0);
if ( rc != X86EMUL_OKAY )
return X86EMUL_OKAY;
}
+ __vmread(GUEST_INTERRUPTIBILITY_INFO, &intr_shadow);
+ if ( intr_shadow & VMX_INTR_SHADOW_MOV_SS )
+ {
+ vmfail_valid(regs, VMX_INSN_VMENTRY_BLOCKED_BY_MOV_SS);
+ return X86EMUL_OKAY;
+ }
+
launched = vvmcs_launched(&nvmx->launched_list,
PFN_DOWN(v->arch.hvm_vmx.vmcs_shadow_maddr));
if ( launched )
VMX_INSN_VMPTRLD_INCORRECT_VMCS_ID = 11,
VMX_INSN_UNSUPPORTED_VMCS_COMPONENT = 12,
VMX_INSN_VMXON_IN_VMX_ROOT = 15,
+ VMX_INSN_VMENTRY_BLOCKED_BY_MOV_SS = 26,
VMX_INSN_FAIL_INVALID = ~0,
};