| From e4365c111fc9b6bef547518d5652c3d7867289fa Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Fri, 5 Mar 2021 14:35:01 +0800 |
| Subject: crypto: qat - fix unmap invalid dma address |
| |
| From: Hui Tang <tanghui20@huawei.com> |
| |
| [ Upstream commit 792b32fad548281e1b7fe14df9063a96c54b32a2 ] |
| |
| 'dma_mapping_error' return a negative value if 'dma_addr' is equal to |
| 'DMA_MAPPING_ERROR' not zero, so fix initialization of 'dma_addr'. |
| |
| Signed-off-by: Hui Tang <tanghui20@huawei.com> |
| Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/crypto/qat/qat_common/qat_algs.c | 11 +++++++++-- |
| 1 file changed, 9 insertions(+), 2 deletions(-) |
| |
| diff --git a/drivers/crypto/qat/qat_common/qat_algs.c b/drivers/crypto/qat/qat_common/qat_algs.c |
| index 0d67cf5ede51..6b8ad3d67481 100644 |
| --- a/drivers/crypto/qat/qat_common/qat_algs.c |
| +++ b/drivers/crypto/qat/qat_common/qat_algs.c |
| @@ -715,7 +715,7 @@ static int qat_alg_sgl_to_bufl(struct qat_crypto_instance *inst, |
| struct qat_alg_buf_list *bufl; |
| struct qat_alg_buf_list *buflout = NULL; |
| dma_addr_t blp; |
| - dma_addr_t bloutp = 0; |
| + dma_addr_t bloutp; |
| struct scatterlist *sg; |
| size_t sz_out, sz = struct_size(bufl, bufers, n + 1); |
| |
| @@ -727,6 +727,9 @@ static int qat_alg_sgl_to_bufl(struct qat_crypto_instance *inst, |
| if (unlikely(!bufl)) |
| return -ENOMEM; |
| |
| + for_each_sg(sgl, sg, n, i) |
| + bufl->bufers[i].addr = DMA_MAPPING_ERROR; |
| + |
| blp = dma_map_single(dev, bufl, sz, DMA_TO_DEVICE); |
| if (unlikely(dma_mapping_error(dev, blp))) |
| goto err_in; |
| @@ -760,10 +763,14 @@ static int qat_alg_sgl_to_bufl(struct qat_crypto_instance *inst, |
| dev_to_node(&GET_DEV(inst->accel_dev))); |
| if (unlikely(!buflout)) |
| goto err_in; |
| + |
| + bufers = buflout->bufers; |
| + for_each_sg(sglout, sg, n, i) |
| + bufers[i].addr = DMA_MAPPING_ERROR; |
| + |
| bloutp = dma_map_single(dev, buflout, sz_out, DMA_TO_DEVICE); |
| if (unlikely(dma_mapping_error(dev, bloutp))) |
| goto err_out; |
| - bufers = buflout->bufers; |
| for_each_sg(sglout, sg, n, i) { |
| int y = sg_nctr; |
| |
| -- |
| 2.30.2 |
| |