diff options
author | Christian Borntraeger <borntraeger@linux.ibm.com> | 2022-01-17 18:40:32 +0100 |
---|---|---|
committer | Heiko Carstens <hca@linux.ibm.com> | 2022-01-23 10:20:03 +0100 |
commit | f094a39c6ba168f2df1edfd1731cca377af5f442 (patch) | |
tree | f2e37f34dfd009809ebd4298c77fd52038bafadf /arch/s390/kernel/nmi.c | |
parent | 1ea1d6a847d2b1d17fefd9196664b95f052a0775 (diff) | |
download | linux-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.c | 9 |
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 |