patch 'net/ice/base: fix memory leak in recipe handling' has been queued to stable release 22.11.11
luca.boccassi at gmail.com
luca.boccassi at gmail.com
Mon Oct 27 17:19:05 CET 2025
Hi,
FYI, your patch has been queued to stable release 22.11.11
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 10/29/25. 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/bluca/dpdk-stable
This queued commit can be viewed at:
https://github.com/bluca/dpdk-stable/commit/a7ddf77e1a325caec25f01105343048f4b0afda4
Thanks.
Luca Boccassi
---
>From a7ddf77e1a325caec25f01105343048f4b0afda4 Mon Sep 17 00:00:00 2001
From: Pandi Kumar Maharajan <pandi.maharajan at intel.com>
Date: Tue, 2 Sep 2025 18:26:54 +0100
Subject: [PATCH] net/ice/base: fix memory leak in recipe handling
[ upstream commit baf3de23be970346378d5159a81782bfb6eb927b ]
Advanced filter operations (apply/remove GENEVE/VXLAN filters) trigger
the call chain: ice_add_adv_rule()/ice_rem_adv_rule() -> ice_find_recp()
-> ice_get_recp_frm_fw(). Each call to ice_get_recp_frm_fw() creates new
linked list entries for SW recipe tracking without cleaning up previous
entries for the same recipe ID. The linked list then continuously grows
with each filter add/remove operation, leading to excessive heap usage
over time.
Fix the memory leak by adding logic to remove the duplicate entries
before adding new ones for the same recipe ID.
Fixes: fed0c5ca5f19 ("net/ice/base: support programming a new switch recipe")
Signed-off-by: Pandi Kumar Maharajan <pandi.maharajan at intel.com>
Signed-off-by: Anatoly Burakov <anatoly.burakov at intel.com>
Acked-by: Bruce Richardson <bruce.richardson at intel.com>
---
drivers/net/ice/base/ice_switch.c | 10 ++++++++++
1 file changed, 10 insertions(+)
diff --git a/drivers/net/ice/base/ice_switch.c b/drivers/net/ice/base/ice_switch.c
index 0ab3abe276..f85f03fba1 100644
--- a/drivers/net/ice/base/ice_switch.c
+++ b/drivers/net/ice/base/ice_switch.c
@@ -2209,6 +2209,7 @@ ice_get_recp_frm_fw(struct ice_hw *hw, struct ice_sw_recipe *recps, u8 rid,
bool *refresh_required)
{
ice_declare_bitmap(result_bm, ICE_MAX_FV_WORDS);
+ struct ice_recp_grp_entry *rg, *tmprg_entry;
struct ice_aqc_recipe_data_elem *tmp;
u16 num_recps = ICE_MAX_NUM_RECIPES;
struct ice_prot_lkup_ext *lkup_exts;
@@ -2250,6 +2251,15 @@ ice_get_recp_frm_fw(struct ice_hw *hw, struct ice_sw_recipe *recps, u8 rid,
*/
lkup_exts = &recps[rid].lkup_exts;
+ /* Remove duplicate entries */
+ LIST_FOR_EACH_ENTRY_SAFE(rg, tmprg_entry, &recps[rid].rg_list,
+ ice_recp_grp_entry, l_entry) {
+ if (rg->rid == rid) {
+ LIST_DEL(&rg->l_entry);
+ ice_free(hw, rg);
+ }
+ }
+
for (sub_recps = 0; sub_recps < num_recps; sub_recps++) {
struct ice_aqc_recipe_data_elem root_bufs = tmp[sub_recps];
struct ice_recp_grp_entry *rg_entry;
--
2.47.3
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-10-27 15:54:35.871149831 +0000
+++ 0027-net-ice-base-fix-memory-leak-in-recipe-handling.patch 2025-10-27 15:54:34.803949751 +0000
@@ -1 +1 @@
-From baf3de23be970346378d5159a81782bfb6eb927b Mon Sep 17 00:00:00 2001
+From a7ddf77e1a325caec25f01105343048f4b0afda4 Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit baf3de23be970346378d5159a81782bfb6eb927b ]
+
@@ -18 +19,0 @@
-Cc: stable at dpdk.org
@@ -24 +25 @@
- drivers/net/intel/ice/base/ice_switch.c | 10 ++++++++++
+ drivers/net/ice/base/ice_switch.c | 10 ++++++++++
@@ -27,5 +28,5 @@
-diff --git a/drivers/net/intel/ice/base/ice_switch.c b/drivers/net/intel/ice/base/ice_switch.c
-index f16bec044c..628473f100 100644
---- a/drivers/net/intel/ice/base/ice_switch.c
-+++ b/drivers/net/intel/ice/base/ice_switch.c
-@@ -2435,6 +2435,7 @@ ice_get_recp_frm_fw(struct ice_hw *hw, struct ice_sw_recipe *recps, u8 rid,
+diff --git a/drivers/net/ice/base/ice_switch.c b/drivers/net/ice/base/ice_switch.c
+index 0ab3abe276..f85f03fba1 100644
+--- a/drivers/net/ice/base/ice_switch.c
++++ b/drivers/net/ice/base/ice_switch.c
+@@ -2209,6 +2209,7 @@ ice_get_recp_frm_fw(struct ice_hw *hw, struct ice_sw_recipe *recps, u8 rid,
@@ -39 +40 @@
-@@ -2481,6 +2482,15 @@ ice_get_recp_frm_fw(struct ice_hw *hw, struct ice_sw_recipe *recps, u8 rid,
+@@ -2250,6 +2251,15 @@ ice_get_recp_frm_fw(struct ice_hw *hw, struct ice_sw_recipe *recps, u8 rid,
More information about the stable
mailing list