crypto: ccree - don't copy zero size ciphertext
authorGilad Ben-Yossef <gilad@benyossef.com>
Tue, 15 Jan 2019 13:43:17 +0000 (15:43 +0200)
committerHerbert Xu <herbert@gondor.apana.org.au>
Fri, 25 Jan 2019 10:41:51 +0000 (18:41 +0800)
For decryption in CBC mode we need to save the last ciphertext block
for use as the next IV. However, we were trying to do this also with
zero sized ciphertext resulting in a panic.

Fix this by only doing the copy if the ciphertext length is at least
of IV size.

Signed-off-by: Gilad Ben-Yossef <gilad@benyossef.com>
Cc: stable@vger.kernel.org
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
drivers/crypto/ccree/cc_cipher.c

index 98ea535242503bff725b134e15009bfa3712f024..e202d7c7ea00c3d89a56b1bb6eda4a72193c4280 100644 (file)
@@ -800,7 +800,8 @@ static int cc_cipher_decrypt(struct skcipher_request *req)
 
        memset(req_ctx, 0, sizeof(*req_ctx));
 
-       if (ctx_p->cipher_mode == DRV_CIPHER_CBC) {
+       if ((ctx_p->cipher_mode == DRV_CIPHER_CBC) &&
+           (req->cryptlen >= ivsize)) {
 
                /* Allocate and save the last IV sized bytes of the source,
                 * which will be lost in case of in-place decryption.