]> git.proxmox.com Git - mirror_ubuntu-hirsute-kernel.git/commitdiff
x86: KVM: svm: don't pretend to advance RIP in case wrmsr_interception() results...
authorVitaly Kuznetsov <vkuznets@redhat.com>
Tue, 13 Aug 2019 13:53:29 +0000 (15:53 +0200)
committerPaolo Bonzini <pbonzini@redhat.com>
Thu, 22 Aug 2019 08:09:18 +0000 (10:09 +0200)
svm->next_rip is only used by skip_emulated_instruction() and in case
kvm_set_msr() fails we rightfully don't do that. Move svm->next_rip
advancement to 'else' branch to avoid creating false impression that
it's always advanced (and make it look like rdmsr_interception()).

This is a preparatory change to removing hardcoded RIP advancement
from instruction intercepts, no functional change.

Signed-off-by: Vitaly Kuznetsov <vkuznets@redhat.com>
Reviewed-by: Sean Christopherson <sean.j.christopherson@intel.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
arch/x86/kvm/svm.c

index c5120a9519f3c968fe2eadfdd1101af7673cf9d0..18190333bde94811dada24e091ebf03040275284 100644 (file)
@@ -4444,13 +4444,13 @@ static int wrmsr_interception(struct vcpu_svm *svm)
        msr.index = ecx;
        msr.host_initiated = false;
 
-       svm->next_rip = kvm_rip_read(&svm->vcpu) + 2;
        if (kvm_set_msr(&svm->vcpu, &msr)) {
                trace_kvm_msr_write_ex(ecx, data);
                kvm_inject_gp(&svm->vcpu, 0);
                return 1;
        } else {
                trace_kvm_msr_write(ecx, data);
+               svm->next_rip = kvm_rip_read(&svm->vcpu) + 2;
                return kvm_skip_emulated_instruction(&svm->vcpu);
        }
 }