From 1cc380679e4cbca5c0c4259653c57da1f47dbafe Mon Sep 17 00:00:00 2001 From: Donald Sharp Date: Fri, 9 Dec 2022 08:14:31 -0500 Subject: [PATCH] zebra: Actually free all memory associated ctx->u.iptable.interface_name_list Signed-off-by: Donald Sharp --- zebra/zebra_dplane.c | 22 ++++++++-------------- 1 file changed, 8 insertions(+), 14 deletions(-) diff --git a/zebra/zebra_dplane.c b/zebra/zebra_dplane.c index 6b9005d645..c189408b57 100644 --- a/zebra/zebra_dplane.c +++ b/zebra/zebra_dplane.c @@ -833,20 +833,8 @@ static void dplane_ctx_free_internal(struct zebra_dplane_ctx *ctx) break; case DPLANE_OP_IPTABLE_ADD: case DPLANE_OP_IPTABLE_DELETE: - if (ctx->u.iptable.interface_name_list) { - struct listnode *node, *nnode; - char *ifname; - - for (ALL_LIST_ELEMENTS( - ctx->u.iptable.interface_name_list, node, - nnode, ifname)) { - LISTNODE_DETACH( - ctx->u.iptable.interface_name_list, - node); - XFREE(MTYPE_DP_NETFILTER, ifname); - } + if (ctx->u.iptable.interface_name_list) list_delete(&ctx->u.iptable.interface_name_list); - } break; case DPLANE_OP_GRE_SET: case DPLANE_OP_INTF_NETCONFIG: @@ -3476,6 +3464,11 @@ static int dplane_ctx_rule_init(struct zebra_dplane_ctx *ctx, return AOK; } +static void zebra_dplane_interface_name_list_deletion(void *data) +{ + XFREE(MTYPE_DP_NETFILTER, data); +} + /** * dplane_ctx_iptable_init() - Initialize a context block for a PBR iptable * update. @@ -3509,9 +3502,10 @@ static int dplane_ctx_iptable_init(struct zebra_dplane_ctx *ctx, ctx->zd_vrf_id = iptable->vrf_id; memcpy(&ctx->u.iptable, iptable, sizeof(struct zebra_pbr_iptable)); - ctx->u.iptable.interface_name_list = NULL; if (iptable->nb_interface > 0) { ctx->u.iptable.interface_name_list = list_new(); + ctx->u.iptable.interface_name_list->del = + zebra_dplane_interface_name_list_deletion; for (ALL_LIST_ELEMENTS_RO(iptable->interface_name_list, node, ifname)) { listnode_add(ctx->u.iptable.interface_name_list, -- 2.39.5