Commit b7b39df7 authored by Herbert Xu's avatar Herbert Xu
Browse files

crypto: caam/qi - Fix drv_ctx refcount bug



Ensure refcount is raised before request is enqueued since it could
be dequeued before the call returns.

Reported-by: default avatarSean Anderson <sean.anderson@linux.dev>
Cc: <stable@vger.kernel.org>
Fixes: 11144416 ("crypto: caam/qi - optimize frame queue cleanup")
Signed-off-by: default avatarHerbert Xu <herbert@gondor.apana.org.au>
Reviewed-by: default avatarHoria Geantă <horia.geanta@nxp.com>
Tested-by: default avatarSean Anderson <sean.anderson@linux.dev>
Signed-off-by: default avatarHerbert Xu <herbert@gondor.apana.org.au>
parent cfb32c65
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -122,12 +122,12 @@ int caam_qi_enqueue(struct device *qidev, struct caam_drv_req *req)
	qm_fd_addr_set64(&fd, addr);

	do {
		ret = qman_enqueue(req->drv_ctx->req_fq, &fd);
		if (likely(!ret)) {
		refcount_inc(&req->drv_ctx->refcnt);
		ret = qman_enqueue(req->drv_ctx->req_fq, &fd);
		if (likely(!ret))
			return 0;
		}

		refcount_dec(&req->drv_ctx->refcnt);
		if (ret != -EBUSY)
			break;
		num_retries++;