Subject: CVE-2021-47008: KVM: SVM: Make sure GHCB is mapped before updating

From: Greg Kroah-Hartman <[email-masked]>

Description
===========

In the Linux kernel, the following vulnerability has been resolved:

KVM: SVM: Make sure GHCB is mapped before updating

Access to the GHCB is mainly in the VMGEXIT path and it is known that the
GHCB will be mapped. But there are two paths where it is possible the GHCB
might not be mapped.

The sev_vcpu_deliver_sipi_vector() routine will update the GHCB to inform
the caller of the AP Reset Hold NAE event that a SIPI has been delivered.
However, if a SIPI is performed without a corresponding AP Reset Hold,
then the GHCB might not be mapped (depending on the previous VMEXIT),
which will result in a NULL pointer dereference.

The svm_complete_emulated_msr() routine will update the GHCB to inform
the caller of a RDMSR/WRMSR operation about any errors. While it is likely
that the GHCB will be mapped in this situation, add a safe guard
in this path to be certain a NULL pointer dereference is not encountered.

The Linux kernel CVE team has assigned CVE-2021-47008 to this issue.

Affected and fixed versions
===========================

	Issue introduced in 5.11 with commit 647daca25d24 and fixed in 5.11.22 with commit fb9e14f4f821
	Issue introduced in 5.11 with commit 647daca25d24 and fixed in 5.12.5 with commit fd722a57fe0b
	Issue introduced in 5.11 with commit 647daca25d24 and fixed in 5.13 with commit a3ba26ecfb56

Please see https://www.kernel.org for a full list of currently supported
kernel versions by the kernel community.

Unaffected versions might change over time as fixes are backported to
older supported kernel versions.  The official CVE entry at
	https://cve.org/CVERecord/?id=CVE-2021-47008
will be updated if fixes are backported, please check that for the most
up to date information about this issue.

Affected files
==============

The file(s) affected by this issue are:
	arch/x86/kvm/svm/sev.c
	arch/x86/kvm/svm/svm.c

Mitigation
==========

The Linux kernel CVE team recommends that you update to the latest
stable kernel version for this, and many other bugfixes.  Individual
changes are never tested alone, but rather are part of a larger kernel
release.  Cherry-picking individual commits is not recommended or
supported by the Linux kernel community at all.  If however, updating to
the latest release is impossible, the individual changes to resolve this
issue can be found at these commits:
	https://git.kernel.org/stable/c/fb9e14f4f8217a0980f8da2c8ff70dee058cbe47
	https://git.kernel.org/stable/c/fd722a57fe0b80133dacae4e1c852ee4212f9b2e
	https://git.kernel.org/stable/c/a3ba26ecfb569f4aa3f867e80c02aa65f20aadad