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
