Commit 670fefb9 authored by Hui Tang's avatar Hui Tang Committed by Herbert Xu
Browse files

crypto: hisilicon/hpre - fix "hpre_ctx_init" resource leak



When calling "hpre_ctx_set" fails, stop and put qp,
otherwise will leak qp resource.

Signed-off-by: default avatarHui Tang <tanghui20@huawei.com>
Signed-off-by: default avatarHerbert Xu <herbert@gondor.apana.org.au>
parent a9214b0b
Loading
Loading
Loading
Loading
+12 −1
Original line number Diff line number Diff line
@@ -454,9 +454,16 @@ static void hpre_alg_cb(struct hisi_qp *qp, void *resp)
	req->cb(ctx, resp);
}

static void hpre_stop_qp_and_put(struct hisi_qp *qp)
{
	hisi_qm_stop_qp(qp);
	hisi_qm_free_qps(&qp, 1);
}

static int hpre_ctx_init(struct hpre_ctx *ctx, u8 type)
{
	struct hisi_qp *qp;
	int ret;

	qp = hpre_get_qp_and_start(type);
	if (IS_ERR(qp))
@@ -465,7 +472,11 @@ static int hpre_ctx_init(struct hpre_ctx *ctx, u8 type)
	qp->qp_ctx = ctx;
	qp->req_cb = hpre_alg_cb;

	return hpre_ctx_set(ctx, qp, QM_Q_DEPTH);
	ret = hpre_ctx_set(ctx, qp, QM_Q_DEPTH);
	if (ret)
		hpre_stop_qp_and_put(qp);

	return ret;
}

static int hpre_msg_request_set(struct hpre_ctx *ctx, void *req, bool is_rsa)