Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a68a1938 authored by Horia Geantă's avatar Horia Geantă Committed by Herbert Xu
Browse files

crypto: caam/qi - properly set IV after {en,de}crypt



caam/qi needs a fix similar to what was done for caam/jr in
commit "crypto: caam/qi - properly set IV after {en,de}crypt",
to allow for ablkcipher/skcipher chunking/streaming.

Cc: <stable@vger.kernel.org>
Fixes: b189817c ("crypto: caam/qi - add ablkcipher and authenc algorithms")
Suggested-by: default avatarDavid Gstir <david@sigma-star.at>
Signed-off-by: default avatarHoria Geantă <horia.geanta@nxp.com>
Signed-off-by: default avatarHerbert Xu <herbert@gondor.apana.org.au>
parent 1ed289f7
Loading
Loading
Loading
Loading
+8 −1
Original line number Diff line number Diff line
@@ -776,9 +776,9 @@ static void ablkcipher_done(struct caam_drv_req *drv_req, u32 status)
	struct crypto_ablkcipher *ablkcipher = crypto_ablkcipher_reqtfm(req);
	struct caam_ctx *caam_ctx = crypto_ablkcipher_ctx(ablkcipher);
	struct device *qidev = caam_ctx->qidev;
#ifdef DEBUG
	int ivsize = crypto_ablkcipher_ivsize(ablkcipher);

#ifdef DEBUG
	dev_err(qidev, "%s %d: status 0x%x\n", __func__, __LINE__, status);
#endif

@@ -799,6 +799,13 @@ static void ablkcipher_done(struct caam_drv_req *drv_req, u32 status)
	ablkcipher_unmap(qidev, edesc, req);
	qi_cache_free(edesc);

	/*
	 * The crypto API expects us to set the IV (req->info) to the last
	 * ciphertext block. This is used e.g. by the CTS mode.
	 */
	scatterwalk_map_and_copy(req->info, req->dst, req->nbytes - ivsize,
				 ivsize, 0);

	ablkcipher_request_complete(req, status);
}