crypto: ccree - unmap buffer before copying IV
authorGilad Ben-Yossef <gilad@benyossef.com>
Tue, 15 Jan 2019 13:43:15 +0000 (15:43 +0200)
committerHerbert Xu <herbert@gondor.apana.org.au>
Fri, 25 Jan 2019 10:41:51 +0000 (18:41 +0800)
We were copying the last ciphertext block into the IV field
for CBC before removing the DMA mapping of the output buffer
with the result of the buffer sometime being out-of-sync cache
wise and were getting intermittent cases of bad output IV.

Fix it by moving the DMA buffer unmapping before the copy.

Signed-off-by: Gilad Ben-Yossef <gilad@benyossef.com>
Fixes: 00904aa0cd59 ("crypto: ccree - fix iv handling")
Cc: <stable@vger.kernel.org>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
drivers/crypto/ccree/cc_cipher.c

index cc92b031fad118f2f6c546c72d0bd345619185d7..98ea535242503bff725b134e15009bfa3712f024 100644 (file)
@@ -652,6 +652,8 @@ static void cc_cipher_complete(struct device *dev, void *cc_req, int err)
        unsigned int ivsize = crypto_skcipher_ivsize(sk_tfm);
        unsigned int len;
 
+       cc_unmap_cipher_request(dev, req_ctx, ivsize, src, dst);
+
        switch (ctx_p->cipher_mode) {
        case DRV_CIPHER_CBC:
                /*
@@ -681,7 +683,6 @@ static void cc_cipher_complete(struct device *dev, void *cc_req, int err)
                break;
        }
 
-       cc_unmap_cipher_request(dev, req_ctx, ivsize, src, dst);
        kzfree(req_ctx->iv);
 
        skcipher_request_complete(req, err);