]> git.proxmox.com Git - mirror_ubuntu-bionic-kernel.git/commitdiff
KVM: s390: vsie: allow guest FORMAT-0 CRYCB on host FORMAT-1
authorPierre Morel <pmorel@linux.ibm.com>
Tue, 25 Sep 2018 23:16:36 +0000 (19:16 -0400)
committerJoseph Salisbury <joseph.salisbury@canonical.com>
Thu, 15 Nov 2018 17:38:12 +0000 (12:38 -0500)
BugLink: https://bugs.launchpad.net/bugs/1787405
When the guest schedules a SIE with a FORMAT-0 CRYCB,
we are able to schedule it in the host with a FORMAT-1
CRYCB if the host uses FORMAT-1 or FORMAT-0.

Signed-off-by: Pierre Morel <pmorel@linux.ibm.com>
Signed-off-by: Tony Krowiak <akrowiak@linux.ibm.com>
Message-Id: <20180925231641.4954-22-akrowiak@linux.vnet.ibm.com>
Signed-off-by: Christian Borntraeger <borntraeger@de.ibm.com>
(cherry picked from commit c9ba8c2cd210d35cdb48683db7c94f11c236d841)
Signed-off-by: Joseph Salisbury <joseph.salisbury@canonical.com>
Acked-by: Brad Figg <brad.figg@canonical.com>
Acked-by: Kamal Mostafa <kamal@canonical.com>
Acked-by: Thadeu Lima de Souza Cascardo <cascardo@canonical.com>
Signed-off-by: Thadeu Lima de Souza Cascardo <cascardo@canonical.com>
arch/s390/kvm/vsie.c

index 47edb6dd2c57c02dcc3eb09de03b1b28e1dcabf3..9966d3261baace38a76b95f63f443f3f961610ce 100644 (file)
@@ -214,11 +214,17 @@ static int setup_apcb(struct kvm_vcpu *vcpu, struct kvm_s390_crypto_cb *crycb_s,
        case CRYCB_FORMAT0:
                if ((crycb_o & PAGE_MASK) != ((crycb_o + 32) & PAGE_MASK))
                        return -EACCES;
-               if (fmt_h != CRYCB_FORMAT0)
+
+               switch (fmt_h) {
+               case CRYCB_FORMAT2:
                        return -EINVAL;
-               return setup_apcb00(vcpu, (unsigned long *) &crycb_s->apcb0,
-                                   (unsigned long) &crycb->apcb0,
-                                   (unsigned long *) &crycb_h->apcb0);
+               case CRYCB_FORMAT1:
+               case CRYCB_FORMAT0:
+                       return setup_apcb00(vcpu,
+                                           (unsigned long *) &crycb_s->apcb0,
+                                           (unsigned long) &crycb->apcb0,
+                                           (unsigned long *) &crycb_h->apcb0);
+               }
        }
        return -EINVAL;
 }