nestedsvm: fix error path when VMRUN emulation fails
PATCH 1/1 nestedsvm: fix error path when VMRUN emulation fails
Hi,
attached patch fixes error path when VMRUN emulation fails. With this l1 guest keeps alive rather crashing the host.
Signed-off-by Christoph Egger <[email protected]>
Signature · 6 lines
---to satisfy European Law for business letters: Advanced Micro Devices GmbH Einsteinring 24, 85689 Dornach b. Muenchen Geschaeftsfuehrer: Alberto Bozzo, Andrew Bowd Sitz: Dornach, Gemeinde Aschheim, Landkreis Muenchen Registergericht Muenchen, HRB Nr. 43632
xen/arch/x86/hvm/svm/nestedsvm.c +8 -4
@@ -708,17 +708,21 @@ nsvm_vcpu_vmrun(struct vcpu *v, struct c/* save host state */ ret =nsvm_vcpu_vmentry (v, regs, inst_len); + +/* Switch vcpu to guest mode. In the error case +* this ensures the host mode is restored correctly +* and l1 guest keeps alive. */ +nestedhvm_vcpu_enter_guestmode (v); +if (ret) {gdprintk (XENLOG_ERR ,"nsvm_vcpu_vmentry failed, injecting #UD\n" );hvm_inject_exception (TRAP_invalid_op,HVM_DELIVER_NO_ERROR_CODE ,0 ); +/* Must happen after hvm_inject_exception or it doesn't work right. */ nv->nv_vmswitch_in_progress =0 ;return 1 ; } -/* Switch vcpu to guest mode -*/ -nestedhvm_vcpu_enter_guestmode (v); nv->nv_vmswitch_in_progress =0 ;return 0 ; }
@@ -1381,7 +1385,7 @@ asmlinkage void nsvm_vcpu_switch(structint ret;ASSERT (!nv->nv_vmexit_pending); ret =nsvm_vcpu_vmrun (v, regs); -if (ret <0 ) +if (ret) goto vmexit;ASSERT (nestedhvm_vcpu_in_guestmode (v));
_______________________________________________
Xen-devel mailing list
[email protected]
http://lists.xensource.com/xen-devel