| From 991afbbee8ac93b055a27477278a5fb556af1ff4 Mon Sep 17 00:00:00 2001 |
| From: Maxim Levitsky <mlevitsk@redhat.com> |
| Date: Wed, 7 Jul 2021 15:50:58 +0300 |
| Subject: KVM: SVM: #SMI interception must not skip the instruction |
| |
| From: Maxim Levitsky <mlevitsk@redhat.com> |
| |
| commit 991afbbee8ac93b055a27477278a5fb556af1ff4 upstream. |
| |
| Commit 5ff3a351f687 ("KVM: x86: Move trivial instruction-based |
| exit handlers to common code"), unfortunately made a mistake of |
| treating nop_on_interception and nop_interception in the same way. |
| |
| Former does truly nothing while the latter skips the instruction. |
| |
| SMI VM exit handler should do nothing. |
| (SMI itself is handled by the host when we do STGI) |
| |
| Fixes: 5ff3a351f687 ("KVM: x86: Move trivial instruction-based exit handlers to common code") |
| Signed-off-by: Maxim Levitsky <mlevitsk@redhat.com> |
| Message-Id: <20210707125100.677203-2-mlevitsk@redhat.com> |
| Cc: stable@vger.kernel.org |
| Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| arch/x86/kvm/svm/svm.c | 7 ++++++- |
| 1 file changed, 6 insertions(+), 1 deletion(-) |
| |
| --- a/arch/x86/kvm/svm/svm.c |
| +++ b/arch/x86/kvm/svm/svm.c |
| @@ -2080,6 +2080,11 @@ static int nmi_interception(struct kvm_v |
| return 1; |
| } |
| |
| +static int smi_interception(struct kvm_vcpu *vcpu) |
| +{ |
| + return 1; |
| +} |
| + |
| static int intr_interception(struct kvm_vcpu *vcpu) |
| { |
| ++vcpu->stat.irq_exits; |
| @@ -3063,7 +3068,7 @@ static int (*const svm_exit_handlers[])( |
| [SVM_EXIT_EXCP_BASE + GP_VECTOR] = gp_interception, |
| [SVM_EXIT_INTR] = intr_interception, |
| [SVM_EXIT_NMI] = nmi_interception, |
| - [SVM_EXIT_SMI] = kvm_emulate_as_nop, |
| + [SVM_EXIT_SMI] = smi_interception, |
| [SVM_EXIT_INIT] = kvm_emulate_as_nop, |
| [SVM_EXIT_VINTR] = interrupt_window_interception, |
| [SVM_EXIT_RDPMC] = kvm_emulate_rdpmc, |