diff options
author | Nadav Amit <[email protected]> | 2014-11-02 11:54:53 +0200 |
---|---|---|
committer | Paolo Bonzini <[email protected]> | 2014-11-07 15:44:08 +0100 |
commit | 38827dbd3fb85a94a002fcf67b8735d5bc1a7e1a (patch) | |
tree | 8d92ad6b0a3bd075a81c8a311d8e5581fd0a17f7 | |
parent | 9d88fca71a99a65c37cbfe481b4aa4e91a27ff13 (diff) |
KVM: x86: Do not update EFLAGS on faulting emulation
If the emulation ends in fault, eflags should not be updated. However, several
instruction emulations (actually all the fastops) currently update eflags, if
the fault was detected afterwards (e.g., #PF during writeback).
Signed-off-by: Nadav Amit <[email protected]>
Signed-off-by: Paolo Bonzini <[email protected]>
-rw-r--r-- | arch/x86/kvm/x86.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c index 641358865a0c..da1591eeb477 100644 --- a/arch/x86/kvm/x86.c +++ b/arch/x86/kvm/x86.c @@ -5360,7 +5360,9 @@ restart: kvm_rip_write(vcpu, ctxt->eip); if (r == EMULATE_DONE) kvm_vcpu_check_singlestep(vcpu, rflags, &r); - __kvm_set_rflags(vcpu, ctxt->eflags); + if (!ctxt->have_exception || + exception_type(ctxt->exception.vector) == EXCPT_TRAP) + __kvm_set_rflags(vcpu, ctxt->eflags); /* * For STI, interrupts are shadowed; so KVM_REQ_EVENT will |