]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
crypto: atmel-tdes - fix DMA sync direction
authorThorsten Blum <thorsten.blum@linux.dev>
Sat, 7 Mar 2026 15:31:10 +0000 (16:31 +0100)
committerHerbert Xu <herbert@gondor.apana.org.au>
Sun, 15 Mar 2026 04:23:13 +0000 (13:23 +0900)
Before DMA output is consumed by the CPU, ->dma_addr_out must be synced
with dma_sync_single_for_cpu() instead of dma_sync_single_for_device().
Using the wrong direction can return stale cache data on non-coherent
platforms.

Fixes: 13802005d8f2 ("crypto: atmel - add Atmel DES/TDES driver")
Fixes: 1f858040c2f7 ("crypto: atmel-tdes - add support for latest release of the IP (0x700)")
Cc: stable@vger.kernel.org
Signed-off-by: Thorsten Blum <thorsten.blum@linux.dev>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
drivers/crypto/atmel-tdes.c

index 278c0df3c92f26abdb88ccf7fea7de8beb350f90..643e507f9c020907695ddd399500f7f93061e3a8 100644 (file)
@@ -294,8 +294,8 @@ static int atmel_tdes_crypt_pdc_stop(struct atmel_tdes_dev *dd)
                dma_unmap_sg(dd->dev, dd->out_sg, 1, DMA_FROM_DEVICE);
                dma_unmap_sg(dd->dev, dd->in_sg, 1, DMA_TO_DEVICE);
        } else {
-               dma_sync_single_for_device(dd->dev, dd->dma_addr_out,
-                                          dd->dma_size, DMA_FROM_DEVICE);
+               dma_sync_single_for_cpu(dd->dev, dd->dma_addr_out,
+                                       dd->dma_size, DMA_FROM_DEVICE);
 
                /* copy data */
                count = atmel_tdes_sg_copy(&dd->out_sg, &dd->out_offset,
@@ -619,8 +619,8 @@ static int atmel_tdes_crypt_dma_stop(struct atmel_tdes_dev *dd)
                        dma_unmap_sg(dd->dev, dd->out_sg, 1, DMA_FROM_DEVICE);
                        dma_unmap_sg(dd->dev, dd->in_sg, 1, DMA_TO_DEVICE);
                } else {
-                       dma_sync_single_for_device(dd->dev, dd->dma_addr_out,
-                               dd->dma_size, DMA_FROM_DEVICE);
+                       dma_sync_single_for_cpu(dd->dev, dd->dma_addr_out,
+                                               dd->dma_size, DMA_FROM_DEVICE);
 
                        /* copy data */
                        count = atmel_tdes_sg_copy(&dd->out_sg, &dd->out_offset,