From 7b8052aecd9c533661493d1140cbec0e1ab311d3 Mon Sep 17 00:00:00 2001 From: Alexander Graf Date: Thu, 18 Dec 2008 13:30:57 +0100 Subject: KVM: SVM: don't run into endless loop in nested svm With the emulation optimization after clgi, we can potentially run into an endless loop thanks to while(true). While this should never occur in practise, except for when the emulation is broken or really awkward code is executed in the VM, this wasn't a problem so far. Signed-off-by: Alexander Graf Signed-off-by: Avi Kivity --- arch/x86/kvm/svm.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/arch/x86/kvm/svm.c b/arch/x86/kvm/svm.c index f67ca16cd797..6577934fa096 100644 --- a/arch/x86/kvm/svm.c +++ b/arch/x86/kvm/svm.c @@ -1848,6 +1848,8 @@ static int stgi_interception(struct vcpu_svm *svm, struct kvm_run *kvm_run) static int clgi_interception(struct vcpu_svm *svm, struct kvm_run *kvm_run) { + int loopcount = 0; + if (nested_svm_check_permissions(svm)) return 1; @@ -1862,7 +1864,7 @@ static int clgi_interception(struct vcpu_svm *svm, struct kvm_run *kvm_run) /* Let's try to emulate as many instructions as possible in GIF=0 */ - while(true) { + while (++loopcount < 100) { int er; er = emulate_instruction(&svm->vcpu, kvm_run, 0, 0, 0); -- cgit v1.2.3