[PATCH 18/30] crypto: sa2ul - fix DMA mapping leak in sa_run() error paths
From: Manorit Chawdhry
Date: Tue Sep 15 2026 - 06:20:49 EST
In sa_run(), when dma_map_sgtable() fails, the code was using kfree(rxd)
directly instead of sa_free_sa_rx_data(rxd). This is problematic because
if an earlier DMA mapping succeeded, it won't be unmapped, leading to a
DMA resource leak.
The sa_free_sa_rx_data() function properly checks the mapped flag and
unmaps any successfully mapped buffers before freeing the rxd structure.
Replace kfree(rxd) with sa_free_sa_rx_data(rxd) in both early error
paths
to ensure proper cleanup of any partial DMA mappings.
Fixes: 854b77371998 ("crypto: sa2ul - Fix memory leak of rxd")
Assisted-by: Sisyphus:claude-sonnet-4-6
Signed-off-by: Manorit Chawdhry <m-chawdhry@xxxxxx>
---
drivers/crypto/sa2ul.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/drivers/crypto/sa2ul.c b/drivers/crypto/sa2ul.c
index dcddb81dc842..cc9f2881efda 100644
--- a/drivers/crypto/sa2ul.c
+++ b/drivers/crypto/sa2ul.c
@@ -1131,7 +1131,7 @@ static int sa_run(struct sa_req *req)
mapped_sg->sgt.orig_nents = src_nents;
ret = dma_map_sgtable(ddev, &mapped_sg->sgt, dir_src, 0);
if (ret) {
- kfree(rxd);
+ sa_free_sa_rx_data(rxd);
return ret;
}
@@ -1142,7 +1142,7 @@ static int sa_run(struct sa_req *req)
mapped_sg->sgt.orig_nents = sg_nents;
ret = dma_map_sgtable(ddev, &mapped_sg->sgt, dir_src, 0);
if (ret) {
- kfree(rxd);
+ sa_free_sa_rx_data(rxd);
return ret;
}
--
2.43.0