summaryrefslogtreecommitdiffstats
path: root/arch/s390/kernel/nmi.c
diff options
context:
space:
mode:
authorChristian Borntraeger <borntraeger@linux.ibm.com>2022-01-17 18:40:32 +0100
committerHeiko Carstens <hca@linux.ibm.com>2022-01-23 10:20:03 +0100
commitf094a39c6ba168f2df1edfd1731cca377af5f442 (patch)
treef2e37f34dfd009809ebd4298c77fd52038bafadf /arch/s390/kernel/nmi.c
parent1ea1d6a847d2b1d17fefd9196664b95f052a0775 (diff)
downloadlinux-stable-f094a39c6ba168f2df1edfd1731cca377af5f442.tar.gz
linux-stable-f094a39c6ba168f2df1edfd1731cca377af5f442.tar.bz2
linux-stable-f094a39c6ba168f2df1edfd1731cca377af5f442.zip
s390/nmi: handle vector validity failures for KVM guests
The machine check validity bit tells about the context. If a KVM guest was running the bit tells about the guest validity and the host state is not affected. As a guest can disable the guest validity this might result in unwanted host errors on machine checks. Cc: stable@vger.kernel.org Fixes: c929500d7a5a ("s390/nmi: s390: New low level handling for machine check happening in guest") Signed-off-by: Christian Borntraeger <borntraeger@linux.ibm.com> Reviewed-by: Heiko Carstens <hca@linux.ibm.com> Signed-off-by: Heiko Carstens <hca@linux.ibm.com>
Diffstat (limited to 'arch/s390/kernel/nmi.c')
-rw-r--r--arch/s390/kernel/nmi.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/arch/s390/kernel/nmi.c b/arch/s390/kernel/nmi.c
index 147c0d5fd9b4..651a51914e34 100644
--- a/arch/s390/kernel/nmi.c
+++ b/arch/s390/kernel/nmi.c
@@ -264,7 +264,14 @@ static int notrace s390_validate_registers(union mci mci, int umode)
/* Validate vector registers */
union ctlreg0 cr0;
- if (!mci.vr) {
+ /*
+ * The vector validity must only be checked if not running a
+ * KVM guest. For KVM guests the machine check is forwarded by
+ * KVM and it is the responsibility of the guest to take
+ * appropriate actions. The host vector or FPU values have been
+ * saved by KVM and will be restored by KVM.
+ */
+ if (!mci.vr && !test_cpu_flag(CIF_MCCK_GUEST)) {
/*
* Vector registers can't be restored. If the kernel
* currently uses vector registers the system is