Commit d776b254 authored by Hareshx Sankar Raj's avatar Hareshx Sankar Raj Committed by Herbert Xu
Browse files

crypto: qat - unmap buffers before free for RSA



The callback function for RSA frees the memory allocated for the source
and destination buffers before unmapping them.
This sequence is wrong.

Change the cleanup sequence to unmap the buffers before freeing them.

Fixes: 3dfaf007 ("crypto: qat - remove dma_free_coherent() for RSA")
Signed-off-by: default avatarHareshx Sankar Raj <hareshx.sankar.raj@intel.com>
Co-developed-by: default avatarBolemx Sivanagaleela <bolemx.sivanagaleela@intel.com>
Signed-off-by: default avatarBolemx Sivanagaleela <bolemx.sivanagaleela@intel.com>
Reviewed-by: default avatarGiovanni Cabiddu <giovanni.cabiddu@intel.com>
Reviewed-by: default avatarAndy Shevchenko <andriy.shevchenko@linux.intel.com>
Signed-off-by: default avatarGiovanni Cabiddu <giovanni.cabiddu@intel.com>
Signed-off-by: default avatarHerbert Xu <herbert@gondor.apana.org.au>
parent eb7713f5
Loading
Loading
Loading
Loading
+4 −5
Original line number Original line Diff line number Diff line
@@ -520,12 +520,14 @@ static void qat_rsa_cb(struct icp_qat_fw_pke_resp *resp)


	err = (err == ICP_QAT_FW_COMN_STATUS_FLAG_OK) ? 0 : -EINVAL;
	err = (err == ICP_QAT_FW_COMN_STATUS_FLAG_OK) ? 0 : -EINVAL;


	kfree_sensitive(req->src_align);

	dma_unmap_single(dev, req->in.rsa.enc.m, req->ctx.rsa->key_sz,
	dma_unmap_single(dev, req->in.rsa.enc.m, req->ctx.rsa->key_sz,
			 DMA_TO_DEVICE);
			 DMA_TO_DEVICE);


	kfree_sensitive(req->src_align);

	areq->dst_len = req->ctx.rsa->key_sz;
	areq->dst_len = req->ctx.rsa->key_sz;
	dma_unmap_single(dev, req->out.rsa.enc.c, req->ctx.rsa->key_sz,
			 DMA_FROM_DEVICE);
	if (req->dst_align) {
	if (req->dst_align) {
		scatterwalk_map_and_copy(req->dst_align, areq->dst, 0,
		scatterwalk_map_and_copy(req->dst_align, areq->dst, 0,
					 areq->dst_len, 1);
					 areq->dst_len, 1);
@@ -533,9 +535,6 @@ static void qat_rsa_cb(struct icp_qat_fw_pke_resp *resp)
		kfree_sensitive(req->dst_align);
		kfree_sensitive(req->dst_align);
	}
	}


	dma_unmap_single(dev, req->out.rsa.enc.c, req->ctx.rsa->key_sz,
			 DMA_FROM_DEVICE);

	dma_unmap_single(dev, req->phy_in, sizeof(struct qat_rsa_input_params),
	dma_unmap_single(dev, req->phy_in, sizeof(struct qat_rsa_input_params),
			 DMA_TO_DEVICE);
			 DMA_TO_DEVICE);
	dma_unmap_single(dev, req->phy_out,
	dma_unmap_single(dev, req->phy_out,