summaryrefslogtreecommitdiffstats
path: root/arch/s390
diff options
context:
space:
mode:
authorHeiko Carstens <hca@linux.ibm.com>2023-11-30 18:56:01 +0100
committerAlexander Gordeev <agordeev@linux.ibm.com>2023-12-11 14:33:05 +0100
commit3b2e00f167f493ca1de7451310f1ce56f0b27fcb (patch)
tree4510723a2e6571fb70e00903c6f5e929782ad1a5 /arch/s390
parentb988b1bb0053c0dcd26187d29ef07566a565cf55 (diff)
downloadlinux-stable-3b2e00f167f493ca1de7451310f1ce56f0b27fcb.tar.gz
linux-stable-3b2e00f167f493ca1de7451310f1ce56f0b27fcb.tar.bz2
linux-stable-3b2e00f167f493ca1de7451310f1ce56f0b27fcb.zip
KVM: s390: use READ_ONCE() to read fpc register value
Use READ_ONCE() to read a vcpu's floating point register value from the memory mapped area. This avoids that, depending on code generation, a different value is tested for validity than the one that is used, since user space can modify the area concurrently and the compiler is free to generate code that reads the value multiple times. Reviewed-by: Christian Borntraeger <borntraeger@linux.ibm.com> Reviewed-by: Claudio Imbrenda <imbrenda@linux.ibm.com> Signed-off-by: Heiko Carstens <hca@linux.ibm.com> Signed-off-by: Alexander Gordeev <agordeev@linux.ibm.com>
Diffstat (limited to 'arch/s390')
-rw-r--r--arch/s390/kvm/kvm-s390.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/arch/s390/kvm/kvm-s390.c b/arch/s390/kvm/kvm-s390.c
index 16e32174807f..1a1af4db5afc 100644
--- a/arch/s390/kvm/kvm-s390.c
+++ b/arch/s390/kvm/kvm-s390.c
@@ -4962,7 +4962,7 @@ static void sync_regs(struct kvm_vcpu *vcpu)
current->thread.fpu.regs = vcpu->run->s.regs.vrs;
else
current->thread.fpu.regs = vcpu->run->s.regs.fprs;
- current->thread.fpu.fpc = vcpu->run->s.regs.fpc;
+ current->thread.fpu.fpc = READ_ONCE(vcpu->run->s.regs.fpc);
if (test_fp_ctl(current->thread.fpu.fpc))
/* User space provided an invalid FPC, let's clear it */
current->thread.fpu.fpc = 0;