diff --git a/xen/arch/x86/hvm/svm/entry.S b/xen/arch/x86/hvm/svm/entry.S index 6fd9652c04..91edb33459 100644 --- a/xen/arch/x86/hvm/svm/entry.S +++ b/xen/arch/x86/hvm/svm/entry.S @@ -74,6 +74,14 @@ __UNLIKELY_END(nsvm_hap) ALTERNATIVE "", svm_vmentry_spec_ctrl, X86_FEATURE_SC_MSR_HVM ALTERNATIVE "", DO_SPEC_CTRL_DIV, X86_FEATURE_SC_DIV + /* + * Set EFLAGS.IF after CLGI covers us from real interrupts, but not + * immediately prior to VMRUN. The VMRUN instruction leaks it's + * INTR_SHADOW into guest state if a VMExit occurs before VMRUN + * completes (e.g. taking #NPF during event injecting.) + */ + sti + pop %r15 pop %r14 pop %r13 @@ -91,7 +99,6 @@ __UNLIKELY_END(nsvm_hap) pop %rsi pop %rdi - sti vmrun SAVE_ALL