|
|
|
|
|
|
|
|
|
|
xen-changelog
[Xen-changelog] [xen-unstable] Nested VMX: fix error paths in emulation
# HG changeset patch
# User Tim Deegan <Tim.Deegan@xxxxxxxxxx>
# Date 1311696025 -3600
# Node ID 590aadf7c46ae979da3552332f592f9492ce6d8b
# Parent 3114b45cf7a0a2d915884bba544be451968b6d0c
Nested VMX: fix error paths in emulation of VMLAUNCH and VMRESUME.
These instructions don't fault on bad VMCS pointers, they set bits in
RFLAGS and continue execution.
Signed-off-by: Tim Deegan <Tim.Deegan@xxxxxxxxxx>
---
diff -r 3114b45cf7a0 -r 590aadf7c46a xen/arch/x86/hvm/vmx/vvmx.c
--- a/xen/arch/x86/hvm/vmx/vvmx.c Tue Jul 26 17:00:24 2011 +0100
+++ b/xen/arch/x86/hvm/vmx/vvmx.c Tue Jul 26 17:00:25 2011 +0100
@@ -1070,11 +1070,17 @@
int launched;
struct vcpu *v = current;
+ if ( vcpu_nestedhvm(v).nv_vvmcxaddr == VMCX_EADDR )
+ {
+ vmreturn (regs, VMFAIL_INVALID);
+ return X86EMUL_OKAY;
+ }
+
launched = __get_vvmcs(vcpu_nestedhvm(v).nv_vvmcx,
NVMX_LAUNCH_STATE);
if ( !launched ) {
vmreturn (regs, VMFAIL_VALID);
- return X86EMUL_EXCEPTION;
+ return X86EMUL_OKAY;
}
return nvmx_vmresume(v,regs);
}
@@ -1085,11 +1091,17 @@
int rc;
struct vcpu *v = current;
+ if ( vcpu_nestedhvm(v).nv_vvmcxaddr == VMCX_EADDR )
+ {
+ vmreturn (regs, VMFAIL_INVALID);
+ return X86EMUL_OKAY;
+ }
+
launched = __get_vvmcs(vcpu_nestedhvm(v).nv_vvmcx,
NVMX_LAUNCH_STATE);
if ( launched ) {
vmreturn (regs, VMFAIL_VALID);
- rc = X86EMUL_EXCEPTION;
+ return X86EMUL_OKAY;
}
else {
rc = nvmx_vmresume(v,regs);
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog
|
<Prev in Thread] |
Current Thread |
[Next in Thread> |
- [Xen-changelog] [xen-unstable] Nested VMX: fix error paths in emulation of VMLAUNCH and VMRESUME.,
Xen patchbot-unstable <=
|
|
|
|
|