linux/arch/x86/kvm
Gleb Natapov a6f177efaa KVM: Reenter guest after emulation failure if due to access to non-mmio address
When shadow pages are in use sometimes KVM try to emulate an instruction
when it accesses a shadowed page. If emulation fails KVM un-shadows the
page and reenter guest to allow vcpu to execute the instruction. If page
is not in shadow page hash KVM assumes that this was attempt to do MMIO
and reports emulation failure to userspace since there is no way to fix
the situation. This logic has a race though. If two vcpus tries to write
to the same shadowed page simultaneously both will enter emulator, but
only one of them will find the page in shadow page hash since the one who
founds it also removes it from there, so another cpu will report failure
to userspace and will abort the guest.

Fix this by checking (in addition to checking shadowed page hash) that
page that caused the emulation belongs to valid memory slot. If it is
then reenter the guest to allow vcpu to reexecute the instruction.

Signed-off-by: Gleb Natapov <gleb@redhat.com>
Signed-off-by: Avi Kivity <avi@redhat.com>
2010-08-02 06:40:34 +03:00
..
emulate.c KVM: x86 emulator: re-implementing 'mov AL,moffs' instruction decoding 2010-08-02 06:40:27 +03:00
i8254.c KVM: fix lock imbalance in kvm_create_pit() 2010-08-02 06:40:31 +03:00
i8254.h KVM: x86: Introduce a workqueue to deliver PIT timer interrupts 2010-08-01 10:46:49 +03:00
i8259.c KVM: Search the LAPIC's for one that will accept a PIC interrupt 2010-08-01 10:47:17 +03:00
irq.c KVM: x86: Introduce a workqueue to deliver PIT timer interrupts 2010-08-01 10:46:49 +03:00
irq.h KVM: i8259: reduce excessive abstraction for pic_irq_request() 2010-08-01 10:47:03 +03:00
Kconfig Merge branch 'kvm-updates/2.6.34' of git://git.kernel.org/pub/scm/virt/kvm/kvm 2010-03-05 13:12:34 -08:00
kvm_cache_regs.h KVM: VMX: Enable XSAVE/XRSTOR for guest 2010-08-01 10:46:31 +03:00
kvm_timer.h KVM: arch/x86/kvm/kvm_timer.h checkpatch cleanup 2010-05-17 12:14:42 +03:00
lapic.c KVM: Add mini-API for vcpu->requests 2010-08-01 10:47:05 +03:00
lapic.h KVM: Add HYPER-V apic access MSRs 2010-03-01 12:36:00 -03:00
Makefile KVM: Move assigned device code to own file 2009-12-03 09:32:09 +02:00
mmu.c KVM: Return EFAULT from kvm ioctl when guest accesses bad area 2010-08-02 06:40:33 +03:00
mmu.h KVM: x86 emulator: fix memory access during x86 emulation 2010-03-01 12:36:11 -03:00
mmutrace.h KVM: MMU: split the operations of kvm_mmu_zap_page() 2010-08-01 10:39:27 +03:00
paging_tmpl.h KVM: MMU: Keep going on permission error 2010-08-02 06:40:30 +03:00
svm.c KVM: VMX: Execute WBINVD to keep data consistency with assigned devices 2010-08-01 10:47:21 +03:00
timer.c KVM: Add mini-API for vcpu->requests 2010-08-01 10:47:05 +03:00
trace.h KVM: Trace emulated instructions 2010-05-17 12:17:35 +03:00
tss.h KVM: x86: hardware task switching support 2008-04-27 12:00:39 +03:00
vmx.c KVM: VMX: fix tlb flush with invalid root 2010-08-02 06:40:16 +03:00
x86.c KVM: Reenter guest after emulation failure if due to access to non-mmio address 2010-08-02 06:40:34 +03:00
x86.h KVM: Remove memory alias support 2010-08-01 10:47:00 +03:00