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 2D5EBA053D for ; Fri, 17 Jul 2020 18:32:46 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 1A8841BEC0; Fri, 17 Jul 2020 18:32:46 +0200 (CEST) Received: from us-smtp-delivery-1.mimecast.com (us-smtp-2.mimecast.com [207.211.31.81]) by dpdk.org (Postfix) with ESMTP id C2A9E1BEB4 for ; Fri, 17 Jul 2020 18:32:44 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1595003564; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=X/7+JwPgf2fIRtROoxJl/ymNjypbvx0A7T7xJBa5Ybw=; b=ixbmBdx6Z/KIOOjAHg48vGKkAEyX/txN+rtKCo8tbgXy2Xe2YlVleT1dxZSZG6zdUtnJ7x dT8gJkbo1f6CZkrlsssLAa/27UNeOwr84FiUWdqPHzUMwsDHprqz7M10flsrgWqTihwfiN xrR7WxEBewC2ejHOd2MhUmv1B6E347U= Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-315-Z3CHImkyPOO-hlrVWFeVng-1; Fri, 17 Jul 2020 12:32:35 -0400 X-MC-Unique: Z3CHImkyPOO-hlrVWFeVng-1 Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 25B928005B0; Fri, 17 Jul 2020 16:32:34 +0000 (UTC) Received: from rh.redhat.com (unknown [10.33.36.168]) by smtp.corp.redhat.com (Postfix) with ESMTP id 6DFA272E48; Fri, 17 Jul 2020 16:32:33 +0000 (UTC) From: Kevin Traynor To: Rahul Lakkireddy Cc: dpdk stable Date: Fri, 17 Jul 2020 17:31:54 +0100 Message-Id: <20200717163214.4839-6-ktraynor@redhat.com> In-Reply-To: <20200717163214.4839-1-ktraynor@redhat.com> References: <20200717163214.4839-1-ktraynor@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 8bit Subject: [dpdk-stable] patch 'net/cxgbe: fix CLIP leak in filter error path' has been queued to LTS release 18.11.10 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" Hi, FYI, your patch has been queued to LTS release 18.11.10 Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet. It will be pushed if I get no objections before 07/23/20. So please shout if anyone has objections. Also note that after the patch there's a diff of the upstream commit vs the patch applied to the branch. This will indicate if there was any rebasing needed to apply to the stable branch. If there were code changes for rebasing (ie: not only metadata diffs), please double check that the rebase was correctly done. Queued patches are on a temporary branch at: https://github.com/kevintraynor/dpdk-stable-queue This queued commit can be viewed at: https://github.com/kevintraynor/dpdk-stable-queue/commit/d2cff2bc6e489fc26b7f1aca87d768d7d7fc58b3 Thanks. Kevin. --- >From d2cff2bc6e489fc26b7f1aca87d768d7d7fc58b3 Mon Sep 17 00:00:00 2001 From: Rahul Lakkireddy Date: Sat, 13 Jun 2020 03:37:23 +0530 Subject: [PATCH] net/cxgbe: fix CLIP leak in filter error path [ upstream commit 844b21299f1a10ac350528365dc761e2934512ee ] Free up Compressed Local IP (CLIP) entry properly during filter creation failure path. Also consolidate all various tables cleanup to a common function and invoke it from both wild-card and exact-match filter paths. Fixes: af44a577988b ("net/cxgbe: support to offload flows to HASH region") Signed-off-by: Rahul Lakkireddy --- drivers/net/cxgbe/cxgbe_filter.c | 68 +++++++++++++++----------------- 1 file changed, 31 insertions(+), 37 deletions(-) diff --git a/drivers/net/cxgbe/cxgbe_filter.c b/drivers/net/cxgbe/cxgbe_filter.c index 8cd26212f8..489c23249c 100644 --- a/drivers/net/cxgbe/cxgbe_filter.c +++ b/drivers/net/cxgbe/cxgbe_filter.c @@ -268,4 +268,20 @@ int cxgbe_alloc_ftid(struct adapter *adap, u8 nentries) } +/** + * Clear a filter and release any of its resources that we own. This also + * clears the filter's "pending" status. + */ +static void clear_filter(struct filter_entry *f) +{ + if (f->clipt) + cxgbe_clip_release(f->dev, f->clipt); + + /* The zeroing of the filter rule below clears the filter valid, + * pending, locked flags etc. so it's all we need for + * this operation. + */ + memset(f, 0, sizeof(*f)); +} + /** * Construct hash filter ntuple. @@ -551,5 +567,5 @@ static int cxgbe_set_hash_filter(struct rte_eth_dev *dev, f = t4_os_alloc(sizeof(*f)); if (!f) - goto out_err; + return -ENOMEM; f->fs = *fs; @@ -588,5 +604,5 @@ static int cxgbe_set_hash_filter(struct rte_eth_dev *dev, if (!mbuf) { ret = -ENOMEM; - goto free_clip; + goto free_atid; } @@ -618,31 +634,13 @@ static int cxgbe_set_hash_filter(struct rte_eth_dev *dev, return 0; -free_clip: - cxgbe_clip_release(f->dev, f->clipt); free_atid: cxgbe_free_atid(t, atid); out_err: + clear_filter(f); t4_os_free(f); return ret; } -/** - * Clear a filter and release any of its resources that we own. This also - * clears the filter's "pending" status. - */ -static void clear_filter(struct filter_entry *f) -{ - if (f->clipt) - cxgbe_clip_release(f->dev, f->clipt); - - /* - * The zeroing of the filter rule below clears the filter valid, - * pending, locked flags etc. so it's all we need for - * this operation. - */ - memset(f, 0, sizeof(*f)); -} - /** * t4_mk_filtdelwr - create a delete filter WR @@ -998,14 +996,4 @@ int cxgbe_set_filter(struct rte_eth_dev *dev, unsigned int filter_id, } - /* - * Allocate a clip table entry only if we have non-zero IPv6 address - */ - if (chip_ver > CHELSIO_T5 && fs->type && - memcmp(fs->val.lip, bitoff, sizeof(bitoff))) { - f->clipt = cxgbe_clip_alloc(dev, (u32 *)&fs->val.lip); - if (!f->clipt) - goto free_tid; - } - /* * Convert the filter specification into our internal format. @@ -1018,4 +1006,14 @@ int cxgbe_set_filter(struct rte_eth_dev *dev, unsigned int filter_id, f->dev = dev; + /* Allocate a clip table entry only if we have non-zero IPv6 address. */ + if (chip_ver > CHELSIO_T5 && f->fs.type && + memcmp(f->fs.val.lip, bitoff, sizeof(bitoff))) { + f->clipt = cxgbe_clip_alloc(dev, (u32 *)&f->fs.val.lip); + if (!f->clipt) { + ret = -ENOMEM; + goto free_tid; + } + } + /* * Attempt to set the filter. If we don't succeed, we clear @@ -1098,4 +1096,5 @@ void cxgbe_hash_filter_rpl(struct adapter *adap, cxgbe_free_atid(t, ftid); + clear_filter(f); t4_os_free(f); } @@ -1273,11 +1272,6 @@ void cxgbe_hash_del_filter_rpl(struct adapter *adap, ctx = f->ctx; - f->ctx = NULL; - - f->valid = 0; - - if (f->clipt) - cxgbe_clip_release(f->dev, f->clipt); + clear_filter(f); cxgbe_remove_tid(t, 0, tid, 0); t4_os_free(f); -- 2.21.3 --- Diff of the applied patch vs upstream commit (please double-check if non-empty: --- --- - 2020-07-17 17:17:00.330522875 +0100 +++ 0006-net-cxgbe-fix-CLIP-leak-in-filter-error-path.patch 2020-07-17 17:16:59.961771832 +0100 @@ -1 +1 @@ -From 844b21299f1a10ac350528365dc761e2934512ee Mon Sep 17 00:00:00 2001 +From d2cff2bc6e489fc26b7f1aca87d768d7d7fc58b3 Mon Sep 17 00:00:00 2001 @@ -5,0 +6,2 @@ +[ upstream commit 844b21299f1a10ac350528365dc761e2934512ee ] + @@ -12 +13,0 @@ -Cc: stable@dpdk.org @@ -20 +21 @@ -index 27e96c73e6..45602d468d 100644 +index 8cd26212f8..489c23249c 100644 @@ -23 +24 @@ -@@ -285,4 +285,20 @@ int cxgbe_alloc_ftid(struct adapter *adap, u8 nentries) +@@ -268,4 +268,20 @@ int cxgbe_alloc_ftid(struct adapter *adap, u8 nentries) @@ -44 +45 @@ -@@ -584,5 +600,5 @@ static int cxgbe_set_hash_filter(struct rte_eth_dev *dev, +@@ -551,5 +567,5 @@ static int cxgbe_set_hash_filter(struct rte_eth_dev *dev, @@ -51 +52 @@ -@@ -632,5 +648,5 @@ static int cxgbe_set_hash_filter(struct rte_eth_dev *dev, +@@ -588,5 +604,5 @@ static int cxgbe_set_hash_filter(struct rte_eth_dev *dev, @@ -58 +59 @@ -@@ -662,31 +678,13 @@ static int cxgbe_set_hash_filter(struct rte_eth_dev *dev, +@@ -618,31 +634,13 @@ static int cxgbe_set_hash_filter(struct rte_eth_dev *dev, @@ -91 +92 @@ -@@ -1071,14 +1069,4 @@ int cxgbe_set_filter(struct rte_eth_dev *dev, unsigned int filter_id, +@@ -998,14 +996,4 @@ int cxgbe_set_filter(struct rte_eth_dev *dev, unsigned int filter_id, @@ -106 +107 @@ -@@ -1091,4 +1079,14 @@ int cxgbe_set_filter(struct rte_eth_dev *dev, unsigned int filter_id, +@@ -1018,4 +1006,14 @@ int cxgbe_set_filter(struct rte_eth_dev *dev, unsigned int filter_id, @@ -119,3 +120,3 @@ - iconf = adapter->params.tp.ingress_config; - -@@ -1193,4 +1191,5 @@ void cxgbe_hash_filter_rpl(struct adapter *adap, + /* + * Attempt to set the filter. If we don't succeed, we clear +@@ -1098,4 +1096,5 @@ void cxgbe_hash_filter_rpl(struct adapter *adap, @@ -127 +128 @@ -@@ -1417,11 +1416,6 @@ void cxgbe_hash_del_filter_rpl(struct adapter *adap, +@@ -1273,11 +1272,6 @@ void cxgbe_hash_del_filter_rpl(struct adapter *adap,