Received: by 2002:a05:6a10:9848:0:0:0:0 with SMTP id x8csp1284516pxf; Fri, 19 Mar 2021 03:49:26 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxjrjyfsM1iDIq8CLmOjToKjE8wgFeIgs5VKQcLOe5HYaSr97VOXx345SgZR2n25icpXNlQ X-Received: by 2002:a05:6402:518d:: with SMTP id q13mr8748623edd.313.1616150965882; Fri, 19 Mar 2021 03:49:25 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1616150965; cv=none; d=google.com; s=arc-20160816; b=IFP5oVmEZ5JONahHldVH0CPUTZYuvyGmrXuC9mAs1tx12esJqMMIbGvpqnJjYmHDL3 wE+Fmp8u7RloyZxQyvo1fZ1lEtQfP5GkU1igAHom+Qx+mLWxr0T1e23syHp4E0opTDKT bjoAqY1XmbMuzq79McdpFG382gWjelrwzpsKBRPk/yxZ/x9yQAtFynE4VMtiTRe2bTNH BfFB45HaQk8g/3mt5Y0zMmpjsoW6vGJaYVCk914679LCTkNzOujO0xsaUvnh6som8eQH 1g+SRa6GpEcLjRaKe0zTTfCME6qPDK02fHAzlZ5ZlvBo8W+CHUcWA5BRVvhCmy6KlgsH TY8w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:mime-version:message-id:date:subject:cc:to:from; bh=FdWSy0lrcueaMV83naNbpmxSj8StX/Wl8t6ZWMtQctc=; b=tRqylT4TizKmaa5lmLkPsfPp4MxMy2NHP2WDctUNk3EzOLvRkcKKN84Go8wjg9mXtM 9Ck8af0GNazKz0NTINrTM0qv5GU1u3k3pFHh2XdcPs/+i/7msRf5bCGTNOSsiWBT5/f8 DMubf4xqY82lWG+oNT8027acUjvQy16/t1F3dX5ufl7feNb0L/m1gh18cpnTt8xfTGit Z3RJNxr656XqSCFpJijdkaiWu9rogxDjBpk95YIF6VIyZAKWpkf76eDI9F99AhCpW33P /SqtqR0RKArKmO9aHAHS3nMPARan9YS5LL/ajUXiRwlN1vh98gP4nJ5APajPXTGDvtlw 3F9Q== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-crypto-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-crypto-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=huawei.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id y14si3916378edt.78.2021.03.19.03.49.02; Fri, 19 Mar 2021 03:49:25 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-crypto-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-crypto-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-crypto-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=huawei.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229894AbhCSKs2 (ORCPT + 99 others); Fri, 19 Mar 2021 06:48:28 -0400 Received: from szxga06-in.huawei.com ([45.249.212.32]:14406 "EHLO szxga06-in.huawei.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229942AbhCSKsB (ORCPT ); Fri, 19 Mar 2021 06:48:01 -0400 Received: from DGGEMS403-HUB.china.huawei.com (unknown [172.30.72.59]) by szxga06-in.huawei.com (SkyGuard) with ESMTP id 4F20tp0y3jzkbCq; Fri, 19 Mar 2021 18:46:26 +0800 (CST) Received: from localhost.localdomain (10.67.165.24) by DGGEMS403-HUB.china.huawei.com (10.3.19.203) with Microsoft SMTP Server id 14.3.498.0; Fri, 19 Mar 2021 18:47:49 +0800 From: Hui Tang To: , CC: , , , Subject: [PATCH] crypto: hisilicon/hpre - fix "hpre_ctx_init" resource leak Date: Fri, 19 Mar 2021 18:45:27 +0800 Message-ID: <1616150727-11907-1-git-send-email-tanghui20@huawei.com> X-Mailer: git-send-email 2.8.1 MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [10.67.165.24] X-CFilter-Loop: Reflected Precedence: bulk List-ID: X-Mailing-List: linux-crypto@vger.kernel.org When calling "hpre_ctx_set" fails, stop and put qp, otherwise will leak qp resource. Signed-off-by: Hui Tang --- drivers/crypto/hisilicon/hpre/hpre_crypto.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) 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) -- 2.8.1