crypto: ccree - zap entire sg on aead request unmap
We were trying to be clever zapping out of the cache only the required length out of scatter list on AEAD request completion and getting it wrong. As Knuth said: "when in douby, use brute force". Zap the whole length of the scatter list. Signed-off-by: Gilad Ben-Yossef <gilad@benyossef.com> Cc: stable@vger.kernel.org # v4.19+ Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
This commit is contained in:
parent
c776f7d37b
commit
05c292afb0
|
@ -517,9 +517,7 @@ void cc_unmap_aead_request(struct device *dev, struct aead_request *req)
|
|||
{
|
||||
struct aead_req_ctx *areq_ctx = aead_request_ctx(req);
|
||||
unsigned int hw_iv_size = areq_ctx->hw_iv_size;
|
||||
struct crypto_aead *tfm = crypto_aead_reqtfm(req);
|
||||
struct cc_drvdata *drvdata = dev_get_drvdata(dev);
|
||||
u32 size_to_unmap = 0;
|
||||
|
||||
if (areq_ctx->mac_buf_dma_addr) {
|
||||
dma_unmap_single(dev, areq_ctx->mac_buf_dma_addr,
|
||||
|
@ -576,19 +574,12 @@ void cc_unmap_aead_request(struct device *dev, struct aead_request *req)
|
|||
dev_dbg(dev, "Unmapping src sgl: req->src=%pK areq_ctx->src.nents=%u areq_ctx->assoc.nents=%u assoclen:%u cryptlen=%u\n",
|
||||
sg_virt(req->src), areq_ctx->src.nents, areq_ctx->assoc.nents,
|
||||
areq_ctx->assoclen, req->cryptlen);
|
||||
size_to_unmap = areq_ctx->assoclen + req->cryptlen;
|
||||
if (areq_ctx->gen_ctx.op_type == DRV_CRYPTO_DIRECTION_ENCRYPT)
|
||||
size_to_unmap += areq_ctx->req_authsize;
|
||||
if (areq_ctx->is_gcm4543)
|
||||
size_to_unmap += crypto_aead_ivsize(tfm);
|
||||
|
||||
dma_unmap_sg(dev, req->src, sg_nents_for_len(req->src, size_to_unmap),
|
||||
DMA_BIDIRECTIONAL);
|
||||
dma_unmap_sg(dev, req->src, sg_nents(req->src), DMA_BIDIRECTIONAL);
|
||||
if (req->src != req->dst) {
|
||||
dev_dbg(dev, "Unmapping dst sgl: req->dst=%pK\n",
|
||||
sg_virt(req->dst));
|
||||
dma_unmap_sg(dev, req->dst,
|
||||
sg_nents_for_len(req->dst, size_to_unmap),
|
||||
dma_unmap_sg(dev, req->dst, sg_nents(req->dst),
|
||||
DMA_BIDIRECTIONAL);
|
||||
}
|
||||
if (drvdata->coherent &&
|
||||
|
|
Loading…
Reference in New Issue