3e20b48
From: "Michael S. Tsirkin" <mst@redhat.com>
3e20b48
Date: Fri, 24 Oct 2014 17:07:19 +0200
3e20b48
Subject: [PATCH] kvm: x86: don't kill guest on unknown exit reason
3e20b48
3e20b48
KVM_EXIT_UNKNOWN is a kvm bug, we don't really know whether it was
3e20b48
triggered by a priveledged application.  Let's not kill the guest: WARN
3e20b48
and inject #UD instead.
3e20b48
3e20b48
Cc: stable@vger.kernel.org
3e20b48
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
3e20b48
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
3e20b48
---
3e20b48
 arch/x86/kvm/svm.c | 6 +++---
3e20b48
 arch/x86/kvm/vmx.c | 6 +++---
3e20b48
 2 files changed, 6 insertions(+), 6 deletions(-)
3e20b48
3e20b48
diff --git a/arch/x86/kvm/svm.c b/arch/x86/kvm/svm.c
3e20b48
index e2de97daa03c..78dadc36fc78 100644
3e20b48
--- a/arch/x86/kvm/svm.c
3e20b48
+++ b/arch/x86/kvm/svm.c
3e20b48
@@ -3534,9 +3534,9 @@ static int handle_exit(struct kvm_vcpu *vcpu)
3e20b48
 
3e20b48
 	if (exit_code >= ARRAY_SIZE(svm_exit_handlers)
3e20b48
 	    || !svm_exit_handlers[exit_code]) {
3e20b48
-		kvm_run->exit_reason = KVM_EXIT_UNKNOWN;
3e20b48
-		kvm_run->hw.hardware_exit_reason = exit_code;
3e20b48
-		return 0;
3e20b48
+		WARN_ONCE(1, "vmx: unexpected exit reason 0x%x\n", exit_code);
3e20b48
+		kvm_queue_exception(vcpu, UD_VECTOR);
3e20b48
+		return 1;
3e20b48
 	}
3e20b48
 
3e20b48
 	return svm_exit_handlers[exit_code](svm);
3e20b48
diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c
3e20b48
index 12dd2b2e655c..41a5426c8edb 100644
3e20b48
--- a/arch/x86/kvm/vmx.c
3e20b48
+++ b/arch/x86/kvm/vmx.c
3e20b48
@@ -7065,10 +7065,10 @@ static int vmx_handle_exit(struct kvm_vcpu *vcpu)
3e20b48
 	    && kvm_vmx_exit_handlers[exit_reason])
3e20b48
 		return kvm_vmx_exit_handlers[exit_reason](vcpu);
3e20b48
 	else {
3e20b48
-		vcpu->run->exit_reason = KVM_EXIT_UNKNOWN;
3e20b48
-		vcpu->run->hw.hardware_exit_reason = exit_reason;
3e20b48
+		WARN_ONCE(1, "vmx: unexpected exit reason 0x%x\n", exit_reason);
3e20b48
+		kvm_queue_exception(vcpu, UD_VECTOR);
3e20b48
+		return 1;
3e20b48
 	}
3e20b48
-	return 0;
3e20b48
 }
3e20b48
 
3e20b48
 static void update_cr8_intercept(struct kvm_vcpu *vcpu, int tpr, int irr)
3e20b48
-- 
3e20b48
1.9.3
3e20b48