]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
crypto: ccree - unmap buffer before copying IV
authorGilad Ben-Yossef <gilad@benyossef.com>
Tue, 15 Jan 2019 13:43:15 +0000 (15:43 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sat, 23 Mar 2019 19:09:40 +0000 (20:09 +0100)
commit c139c72e2beb3e3db5148910b3962b7322e24374 upstream.

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>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/crypto/ccree/cc_cipher.c

index 339e0d4928e70f3fd276ea596ad10f1259c1b86d..7b9aa93544bad1ba4fc77976a571ec1c9186492d 100644 (file)
@@ -635,6 +635,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:
                /*
@@ -664,7 +666,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);