From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id E6E82A04C7 for ; Mon, 14 Sep 2020 16:31:03 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id DA1411C0DA; Mon, 14 Sep 2020 16:31:03 +0200 (CEST) Received: from huawei.com (szxga06-in.huawei.com [45.249.212.32]) by dpdk.org (Postfix) with ESMTP id C59AB1C0CC; Mon, 14 Sep 2020 16:30:59 +0200 (CEST) Received: from DGGEMS410-HUB.china.huawei.com (unknown [172.30.72.59]) by Forcepoint Email with ESMTP id BCE1F21C041EAF77A3E3; Mon, 14 Sep 2020 22:30:57 +0800 (CST) Received: from tester.localdomain (10.175.119.39) by DGGEMS410-HUB.china.huawei.com (10.3.19.210) with Microsoft SMTP Server id 14.3.487.0; Mon, 14 Sep 2020 22:30:48 +0800 From: Xiaoyun wang To: CC: , , , , , , , , , Xiaoyun wang Date: Mon, 14 Sep 2020 22:31:42 +0800 Message-ID: <46c2921994aada4b774bb4ad5cf20b47415134d4.1600093192.git.cloud.wangxiaoyun@huawei.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: References: MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [10.175.119.39] X-CFilter-Loop: Reflected Subject: [dpdk-stable] [PATCH v1 1/5] net/hinic: fix return value of null not checked X-BeenThere: stable@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches for DPDK stable branches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: stable-bounces@dpdk.org Sender: "stable" If rte_zmalloc failed, pmd driver should also delete the ntuple filter or ethertype filter or normal and tcam filter that already added before. Fixes: d7964ce192e7 ("net/hinic: check memory allocations in flow creation") Cc: stable@dpdk.org Signed-off-by: Xiaoyun wang --- drivers/net/hinic/hinic_pmd_flow.c | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/drivers/net/hinic/hinic_pmd_flow.c b/drivers/net/hinic/hinic_pmd_flow.c index 70fd445..9888a87 100644 --- a/drivers/net/hinic/hinic_pmd_flow.c +++ b/drivers/net/hinic/hinic_pmd_flow.c @@ -694,6 +694,7 @@ static int hinic_ntuple_item_check_end(const struct rte_flow_item *item, item, "Not supported by ntuple filter"); return -rte_errno; } + return 0; } @@ -2981,6 +2982,8 @@ static struct rte_flow *hinic_flow_create(struct rte_eth_dev *dev, sizeof(struct hinic_ntuple_filter_ele), 0); if (ntuple_filter_ptr == NULL) { PMD_DRV_LOG(ERR, "Failed to allocate ntuple_filter_ptr"); + (void)hinic_add_del_ntuple_filter(dev, + &ntuple_filter, FALSE); goto out; } rte_memcpy(&ntuple_filter_ptr->filter_info, @@ -3011,6 +3014,8 @@ static struct rte_flow *hinic_flow_create(struct rte_eth_dev *dev, sizeof(struct hinic_ethertype_filter_ele), 0); if (ethertype_filter_ptr == NULL) { PMD_DRV_LOG(ERR, "Failed to allocate ethertype_filter_ptr"); + (void)hinic_add_del_ethertype_filter(dev, + ðertype_filter, FALSE); goto out; } rte_memcpy(ðertype_filter_ptr->filter_info, @@ -3034,11 +3039,10 @@ static struct rte_flow *hinic_flow_create(struct rte_eth_dev *dev, actions, &fdir_rule, error); if (!ret) { if (fdir_rule.mode == HINIC_FDIR_MODE_NORMAL) { - ret = hinic_add_del_fdir_filter(dev, - &fdir_rule, TRUE); + ret = hinic_add_del_fdir_filter(dev, &fdir_rule, TRUE); } else if (fdir_rule.mode == HINIC_FDIR_MODE_TCAM) { - ret = hinic_add_del_tcam_fdir_filter(dev, - &fdir_rule, TRUE); + ret = hinic_add_del_tcam_fdir_filter(dev, &fdir_rule, + TRUE); } else { PMD_DRV_LOG(INFO, "flow fdir rule create failed, rule mode wrong"); goto out; @@ -3048,6 +3052,13 @@ static struct rte_flow *hinic_flow_create(struct rte_eth_dev *dev, sizeof(struct hinic_fdir_rule_ele), 0); if (fdir_rule_ptr == NULL) { PMD_DRV_LOG(ERR, "Failed to allocate fdir_rule_ptr"); + if (fdir_rule.mode == HINIC_FDIR_MODE_NORMAL) + hinic_add_del_fdir_filter(dev, + &fdir_rule, FALSE); + else if (fdir_rule.mode == HINIC_FDIR_MODE_TCAM) + hinic_add_del_tcam_fdir_filter(dev, + &fdir_rule, FALSE); + goto out; } rte_memcpy(&fdir_rule_ptr->filter_info, &fdir_rule, -- 1.8.3.1