Index: svm.c =================================================================== --- svm.c (revision 4412) +++ svm.c (working copy) @@ -481,7 +481,7 @@ INTERCEPT_DR5_MASK | INTERCEPT_DR7_MASK; - control->intercept_exceptions = 1 << PF_VECTOR; + control->intercept_exceptions = (1 << PF_VECTOR) | (1 << UD_VECTOR); control->intercept = (1ULL << INTERCEPT_INTR) | @@ -1247,6 +1247,15 @@ return 1; } +static int ud_interception(struct kvm_vcpu *vcpu, struct kvm_run *run) +{ + printk(KERN_ERR "#ud: cr0 %lx (%llx) cr4 %lx (%llx)\n", + vcpu->cr0, vcpu->svm->vmcb->save.cr0, + vcpu->cr4, vcpu->svm->vmcb->save.cr4); + run->exit_reason = KVM_EXIT_SHUTDOWN; + return 0; +} + static int (*svm_exit_handlers[])(struct kvm_vcpu *vcpu, struct kvm_run *kvm_run) = { [SVM_EXIT_READ_CR0] = emulate_on_interception, @@ -1267,6 +1276,7 @@ [SVM_EXIT_WRITE_DR5] = emulate_on_interception, [SVM_EXIT_WRITE_DR7] = emulate_on_interception, [SVM_EXIT_EXCP_BASE + PF_VECTOR] = pf_interception, + [SVM_EXIT_EXCP_BASE + UD_VECTOR] = ud_interception, [SVM_EXIT_INTR] = nop_on_interception, [SVM_EXIT_NMI] = nop_on_interception, [SVM_EXIT_SMI] = nop_on_interception,