]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
crypto: inside-secure - Fix `dma_unmap_sg()` nents value
authorThomas Fourier <fourier.thomas@gmail.com>
Fri, 20 Jun 2025 07:29:26 +0000 (09:29 +0200)
committerHerbert Xu <herbert@gondor.apana.org.au>
Mon, 7 Jul 2025 03:27:04 +0000 (15:27 +1200)
The `dma_unmap_sg()` functions should be called with the same nents as the
`dma_map_sg()`, not the value the map function returned.

Fixes: c957f8b3e2e5 ("crypto: inside-secure - avoid unmapping DMA memory that was not mapped")
Signed-off-by: Thomas Fourier <fourier.thomas@gmail.com>
Reviewed-by: Antoine Tenart <atenart@kernel.org>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
drivers/crypto/inside-secure/safexcel_hash.c

index d2b632193bebb982fce069c3586106105548d595..5baf4bd2fcee52fe616c660bdcf81559f83623bb 100644 (file)
@@ -249,7 +249,9 @@ static int safexcel_handle_req_result(struct safexcel_crypto_priv *priv,
        safexcel_complete(priv, ring);
 
        if (sreq->nents) {
-               dma_unmap_sg(priv->dev, areq->src, sreq->nents, DMA_TO_DEVICE);
+               dma_unmap_sg(priv->dev, areq->src,
+                            sg_nents_for_len(areq->src, areq->nbytes),
+                            DMA_TO_DEVICE);
                sreq->nents = 0;
        }
 
@@ -497,7 +499,9 @@ unmap_result:
                         DMA_FROM_DEVICE);
 unmap_sg:
        if (req->nents) {
-               dma_unmap_sg(priv->dev, areq->src, req->nents, DMA_TO_DEVICE);
+               dma_unmap_sg(priv->dev, areq->src,
+                            sg_nents_for_len(areq->src, areq->nbytes),
+                            DMA_TO_DEVICE);
                req->nents = 0;
        }
 cdesc_rollback: