]> git.proxmox.com Git - mirror_ubuntu-artful-kernel.git/blobdiff - arch/s390/crypto/des_s390.c
s390/crypto: Don't panic after crypto instruction failures
[mirror_ubuntu-artful-kernel.git] / arch / s390 / crypto / des_s390.c
index b49fb96f42070623a1645db10ebee3457eb0a98a..bcca01c9989daf57b963db9168d64ec09c7ee5af 100644 (file)
@@ -94,7 +94,8 @@ static int ecb_desall_crypt(struct blkcipher_desc *desc, long func,
                u8 *in = walk->src.virt.addr;
 
                ret = crypt_s390_km(func, key, out, in, n);
-               BUG_ON((ret < 0) || (ret != n));
+               if (ret < 0 || ret != n)
+                       return -EIO;
 
                nbytes &= DES_BLOCK_SIZE - 1;
                ret = blkcipher_walk_done(desc, walk, nbytes);
@@ -120,7 +121,8 @@ static int cbc_desall_crypt(struct blkcipher_desc *desc, long func,
                u8 *in = walk->src.virt.addr;
 
                ret = crypt_s390_kmc(func, iv, out, in, n);
-               BUG_ON((ret < 0) || (ret != n));
+               if (ret < 0 || ret != n)
+                       return -EIO;
 
                nbytes &= DES_BLOCK_SIZE - 1;
                ret = blkcipher_walk_done(desc, walk, nbytes);
@@ -386,7 +388,8 @@ static int ctr_desall_crypt(struct blkcipher_desc *desc, long func,
                                crypto_inc(ctrblk + i, DES_BLOCK_SIZE);
                        }
                        ret = crypt_s390_kmctr(func, ctx->key, out, in, n, ctrblk);
-                       BUG_ON((ret < 0) || (ret != n));
+                       if (ret < 0 || ret != n)
+                               return -EIO;
                        if (n > DES_BLOCK_SIZE)
                                memcpy(ctrblk, ctrblk + n - DES_BLOCK_SIZE,
                                       DES_BLOCK_SIZE);
@@ -404,7 +407,8 @@ static int ctr_desall_crypt(struct blkcipher_desc *desc, long func,
                in = walk->src.virt.addr;
                ret = crypt_s390_kmctr(func, ctx->key, buf, in,
                                       DES_BLOCK_SIZE, ctrblk);
-               BUG_ON(ret < 0 || ret != DES_BLOCK_SIZE);
+               if (ret < 0 || ret != DES_BLOCK_SIZE)
+                       return -EIO;
                memcpy(out, buf, nbytes);
                crypto_inc(ctrblk, DES_BLOCK_SIZE);
                ret = blkcipher_walk_done(desc, walk, 0);