summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGilad Ben-Yossef <gilad@benyossef.com>2019-01-15 15:43:17 +0200
committerHerbert Xu <herbert@gondor.apana.org.au>2019-01-25 18:41:51 +0800
commit2b5ac17463dcb2411fed506edcf259a89bb538ba (patch)
tree2554d40c2df4f4b6b28b917a4d421fe31138cb2e
parent27649c39b56521a2c5d350604688f31db92bf1bc (diff)
downloadlinux-stable-2b5ac17463dcb2411fed506edcf259a89bb538ba.tar.gz
linux-stable-2b5ac17463dcb2411fed506edcf259a89bb538ba.tar.bz2
linux-stable-2b5ac17463dcb2411fed506edcf259a89bb538ba.zip
crypto: ccree - don't copy zero size ciphertext
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>
-rw-r--r--drivers/crypto/ccree/cc_cipher.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/drivers/crypto/ccree/cc_cipher.c b/drivers/crypto/ccree/cc_cipher.c
index 98ea53524250..e202d7c7ea00 100644
--- a/drivers/crypto/ccree/cc_cipher.c
+++ b/drivers/crypto/ccree/cc_cipher.c
@@ -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.