KVM: s390: SCA must not cross page boundaries
[firefly-linux-kernel-4.4.55.git] / arch / s390 / kvm / kvm-s390.c
index 618c85411a51ea9a6a95cb116ab10098cbf7708d..35596177fad24e4e16213bb0d71119fa834eccbf 100644 (file)
@@ -1098,7 +1098,9 @@ int kvm_arch_init_vm(struct kvm *kvm, unsigned long type)
        if (!kvm->arch.sca)
                goto out_err;
        spin_lock(&kvm_lock);
-       sca_offset = (sca_offset + 16) & 0x7f0;
+       sca_offset += 16;
+       if (sca_offset + sizeof(struct sca_block) > PAGE_SIZE)
+               sca_offset = 0;
        kvm->arch.sca = (struct sca_block *) ((char *) kvm->arch.sca + sca_offset);
        spin_unlock(&kvm_lock);