KVM: x86: nSVM: harden svm_free_nested against freeing vmcb02 while still in use

commit 16ae56d7e0528559bf8dc9070e3bfd8ba3de80df upstream.

Make sure that KVM uses vmcb01 before freeing nested state, and warn if
that is not the case.

This is a minimal fix for CVE-2022-3344 making the kernel print a warning
instead of a kernel panic.

Cc: stable@vger.kernel.org
Signed-off-by: Maxim Levitsky <mlevitsk@redhat.com>
Message-Id: <20221103141351.50662-3-mlevitsk@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
Maxim Levitsky
2022-11-03 16:13:44 +02:00
committed by Greg Kroah-Hartman
parent 6425c590d0
commit 3e87cb0caa

View File

@@ -919,6 +919,9 @@ void svm_free_nested(struct vcpu_svm *svm)
if (!svm->nested.initialized) if (!svm->nested.initialized)
return; return;
if (WARN_ON_ONCE(svm->vmcb != svm->vmcb01.ptr))
svm_switch_vmcb(svm, &svm->vmcb01);
svm_vcpu_free_msrpm(svm->nested.msrpm); svm_vcpu_free_msrpm(svm->nested.msrpm);
svm->nested.msrpm = NULL; svm->nested.msrpm = NULL;