crypto: sahara - fix wait_for_completion_timeout() error handling
authorOvidiu Panait <ovidiu.panait@windriver.com>
Sun, 24 Dec 2023 08:21:33 +0000 (10:21 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 25 Jan 2024 23:35:18 +0000 (15:35 -0800)
[ Upstream commit 2dba8e1d1a7957dcbe7888846268538847b471d1 ]

The sg lists are not unmapped in case of timeout errors. Fix this.

Fixes: 5a2bb93f5992 ("crypto: sahara - add support for SHA1/256")
Fixes: 5de8875281e1 ("crypto: sahara - Add driver for SAHARA2 accelerator.")
Signed-off-by: Ovidiu Panait <ovidiu.panait@windriver.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/crypto/sahara.c

index 80d419d..86ff5ad 100644 (file)
@@ -607,16 +607,17 @@ static int sahara_aes_process(struct skcipher_request *req)
 
        timeout = wait_for_completion_timeout(&dev->dma_completion,
                                msecs_to_jiffies(SAHARA_TIMEOUT_MS));
-       if (!timeout) {
-               dev_err(dev->device, "AES timeout\n");
-               return -ETIMEDOUT;
-       }
 
        dma_unmap_sg(dev->device, dev->out_sg, dev->nb_out_sg,
                DMA_FROM_DEVICE);
        dma_unmap_sg(dev->device, dev->in_sg, dev->nb_in_sg,
                DMA_TO_DEVICE);
 
+       if (!timeout) {
+               dev_err(dev->device, "AES timeout\n");
+               return -ETIMEDOUT;
+       }
+
        if ((dev->flags & FLAGS_CBC) && req->iv)
                sahara_aes_cbc_update_iv(req);
 
@@ -1007,15 +1008,16 @@ static int sahara_sha_process(struct ahash_request *req)
 
        timeout = wait_for_completion_timeout(&dev->dma_completion,
                                msecs_to_jiffies(SAHARA_TIMEOUT_MS));
-       if (!timeout) {
-               dev_err(dev->device, "SHA timeout\n");
-               return -ETIMEDOUT;
-       }
 
        if (rctx->sg_in_idx)
                dma_unmap_sg(dev->device, dev->in_sg, dev->nb_in_sg,
                             DMA_TO_DEVICE);
 
+       if (!timeout) {
+               dev_err(dev->device, "SHA timeout\n");
+               return -ETIMEDOUT;
+       }
+
        memcpy(rctx->context, dev->context_base, rctx->context_size);
 
        if (req->result && rctx->last)