summaryrefslogtreecommitdiffstats
path: root/arch/x86/kvm/mmu.c
diff options
context:
space:
mode:
authorGleb Natapov2010-05-10 10:16:56 +0200
committerAvi Kivity2010-08-01 09:35:40 +0200
commit6d77dbfc88e37c9efd5c5dd18445cfe819ae17ea (patch)
tree96a3afb750d254a99dd43fa4730fd6ff187eb2a0 /arch/x86/kvm/mmu.c
parentKVM: Document KVM_SET_BOOT_CPU_ID (diff)
downloadkernel-qcow2-linux-6d77dbfc88e37c9efd5c5dd18445cfe819ae17ea.tar.gz
kernel-qcow2-linux-6d77dbfc88e37c9efd5c5dd18445cfe819ae17ea.tar.xz
kernel-qcow2-linux-6d77dbfc88e37c9efd5c5dd18445cfe819ae17ea.zip
KVM: inject #UD if instruction emulation fails and exit to userspace
Do not kill VM when instruction emulation fails. Inject #UD and report failure to userspace instead. Userspace may choose to reenter guest if vcpu is in userspace (cpl == 3) in which case guest OS will kill offending process and continue running. Signed-off-by: Gleb Natapov <gleb@redhat.com> Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com>
Diffstat (limited to 'arch/x86/kvm/mmu.c')
-rw-r--r--arch/x86/kvm/mmu.c5
1 files changed, 1 insertions, 4 deletions
diff --git a/arch/x86/kvm/mmu.c b/arch/x86/kvm/mmu.c
index be981b1f1881..4a02dee1f2b5 100644
--- a/arch/x86/kvm/mmu.c
+++ b/arch/x86/kvm/mmu.c
@@ -2814,11 +2814,8 @@ int kvm_mmu_page_fault(struct kvm_vcpu *vcpu, gva_t cr2, u32 error_code)
return 1;
case EMULATE_DO_MMIO:
++vcpu->stat.mmio_exits;
- return 0;
+ /* fall through */
case EMULATE_FAIL:
- vcpu->run->exit_reason = KVM_EXIT_INTERNAL_ERROR;
- vcpu->run->internal.suberror = KVM_INTERNAL_ERROR_EMULATION;
- vcpu->run->internal.ndata = 0;
return 0;
default:
BUG();