From patchwork Thu Apr 1 02:53:34 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kalesh A P X-Patchwork-Id: 90253 X-Patchwork-Delegate: ajit.khaparde@broadcom.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 3A02DA034F; Thu, 1 Apr 2021 04:31:35 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id C42B4140FA7; Thu, 1 Apr 2021 04:31:34 +0200 (CEST) Received: from relay.smtp-ext.broadcom.com (relay.smtp-ext.broadcom.com [192.19.232.172]) by mails.dpdk.org (Postfix) with ESMTP id D20CB40142 for ; Thu, 1 Apr 2021 04:31:33 +0200 (CEST) Received: from dhcp-10-123-153-22.dhcp.broadcom.net (bgccx-dev-host-lnx2.bec.broadcom.net [10.123.153.22]) by relay.smtp-ext.broadcom.com (Postfix) with ESMTP id 07EA024773; Wed, 31 Mar 2021 19:31:31 -0700 (PDT) DKIM-Filter: OpenDKIM Filter v2.11.0 relay.smtp-ext.broadcom.com 07EA024773 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=broadcom.com; s=dkimrelay; t=1617244293; bh=W4nNifVEt+sumEkYWQ+cyDyrDV6BwpKQFX6oQHF3wZM=; h=From:To:Cc:Subject:Date:From; b=rEN3lzULuWGJi775L/nC7t33PIaLkN5nP48CXsEcUX8vL3aHOZDCqJWorIqFfB+St 8Zhq1y+aheraOKNQiTXryZ+up+5QfAOd7pPfhvEBdMwuBRvaziESOfQ0hLl25GPDug QyMkZ8fU8kxvMDaq41VriwK/oG9cYx8ebjwaaKUs= From: Kalesh A P To: dev@dpdk.org Cc: ferruh.yigit@intel.com, ajit.khaparde@broadcom.com Date: Thu, 1 Apr 2021 08:23:34 +0530 Message-Id: <20210401025334.1706-1-kalesh-anakkur.purayil@broadcom.com> X-Mailer: git-send-email 2.10.1 Subject: [dpdk-dev] [PATCH] net/bnxt: fix double free in port start failure X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" From: Kalesh AP During port start when bnxt_start_nic() fails, it tries to free "intr_handle->intr_vec" but the variable is not set to NULL after that. If port start fails, driver invokes bnxt_dev_stop() which will lead to a double free of "intr_handle->intr_vec". Fix it by removing the call to free "intr_handle->intr_vec" in the bnxt_start_nic() failure path as it is anyway doing in bnxt_dev_stop(). Fixes: 9d276b439aaf ("net/bnxt: fix error handling in device start") Cc: stable@dpdk.org Signed-off-by: Kalesh AP Reviewed-by: Somnath Kotur Reviewed-by: Ajit Kumar Khaparde --- drivers/net/bnxt/bnxt_ethdev.c | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/drivers/net/bnxt/bnxt_ethdev.c b/drivers/net/bnxt/bnxt_ethdev.c index ed2ae45..0042d8a 100644 --- a/drivers/net/bnxt/bnxt_ethdev.c +++ b/drivers/net/bnxt/bnxt_ethdev.c @@ -793,7 +793,7 @@ static int bnxt_start_nic(struct bnxt *bp) PMD_DRV_LOG(ERR, "Failed to allocate %d rx_queues" " intr_vec", bp->eth_dev->data->nb_rx_queues); rc = -ENOMEM; - goto err_disable; + goto err_out; } PMD_DRV_LOG(DEBUG, "intr_handle->intr_vec = %p " "intr_handle->nb_efd = %d intr_handle->max_intr = %d\n", @@ -813,12 +813,12 @@ static int bnxt_start_nic(struct bnxt *bp) #ifndef RTE_EXEC_ENV_FREEBSD /* In FreeBSD OS, nic_uio driver does not support interrupts */ if (rc) - goto err_free; + goto err_out; #endif rc = bnxt_update_phy_setting(bp); if (rc) - goto err_free; + goto err_out; bp->mark_table = rte_zmalloc("bnxt_mark_table", BNXT_MARK_TABLE_SZ, 0); if (!bp->mark_table) @@ -826,10 +826,6 @@ static int bnxt_start_nic(struct bnxt *bp) return 0; -err_free: - rte_free(intr_handle->intr_vec); -err_disable: - rte_intr_efd_disable(intr_handle); err_out: /* Some of the error status returned by FW may not be from errno.h */ if (rc > 0)