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 <[email protected]>
---
 arch/x86/kvm/svm.c |    4 +++-
 1 files changed, 3 insertions(+), 1 deletions(-)

diff --git a/arch/x86/kvm/svm.c b/arch/x86/kvm/svm.c
index f67ca16..bf901e7 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);
-- 
1.5.6

--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to