diff mbox series

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

Message ID 1616150727-11907-1-git-send-email-tanghui20@huawei.com
State Accepted
Commit 670fefb9240950fe9e3e4740039a7e13e5910470
Headers show
Series crypto: hisilicon/hpre - fix "hpre_ctx_init" resource leak | expand

Commit Message

Hui Tang March 19, 2021, 10:45 a.m. UTC
When calling "hpre_ctx_set" fails, stop and put qp,
otherwise will leak qp resource.

Signed-off-by: Hui Tang <tanghui20@huawei.com>
---
 drivers/crypto/hisilicon/hpre/hpre_crypto.c | 13 ++++++++++++-
 1 file changed, 12 insertions(+), 1 deletion(-)

Comments

Herbert Xu March 26, 2021, 9:33 a.m. UTC | #1
On Fri, Mar 19, 2021 at 06:45:27PM +0800, Hui Tang wrote:
> When calling "hpre_ctx_set" fails, stop and put qp,

> otherwise will leak qp resource.

> 

> Signed-off-by: Hui Tang <tanghui20@huawei.com>

> ---

>  drivers/crypto/hisilicon/hpre/hpre_crypto.c | 13 ++++++++++++-

>  1 file changed, 12 insertions(+), 1 deletion(-)


Patch applied.  Thanks.
-- 
Email: Herbert Xu <herbert@gondor.apana.org.au>
Home Page: http://gondor.apana.org.au/~herbert/
PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt
diff mbox series

Patch

diff --git a/drivers/crypto/hisilicon/hpre/hpre_crypto.c b/drivers/crypto/hisilicon/hpre/hpre_crypto.c
index b77473b..d7a4adf 100644
--- a/drivers/crypto/hisilicon/hpre/hpre_crypto.c
+++ b/drivers/crypto/hisilicon/hpre/hpre_crypto.c
@@ -458,9 +458,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))
@@ -469,7 +476,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)