From: Vitaly Kuznetsov Date: Tue, 13 Aug 2019 13:53:29 +0000 (+0200) Subject: x86: KVM: svm: don't pretend to advance RIP in case wrmsr_interception() results... X-Git-Tag: v5.15~5513^2~37 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=05402f64544f054edbe41f45f6ec52dbe0c1a324;p=platform%2Fkernel%2Flinux-starfive.git x86: KVM: svm: don't pretend to advance RIP in case wrmsr_interception() results in #GP 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 Reviewed-by: Sean Christopherson Signed-off-by: Paolo Bonzini --- diff --git a/arch/x86/kvm/svm.c b/arch/x86/kvm/svm.c index c5120a9..1819033 100644 --- a/arch/x86/kvm/svm.c +++ b/arch/x86/kvm/svm.c @@ -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); } }