diff options
| author | Donald Sharp <sharpd@nvidia.com> | 2022-12-09 08:14:31 -0500 | 
|---|---|---|
| committer | Donald Sharp <sharpd@nvidia.com> | 2022-12-09 08:38:50 -0500 | 
| commit | 1cc380679e4cbca5c0c4259653c57da1f47dbafe (patch) | |
| tree | f04346fc8c808d6a039c1628339872354911efd3 /zebra/zebra_dplane.c | |
| parent | 63e6e11f9f8a5e60fc9f6aaf54d33ba04cc3a6b4 (diff) | |
zebra: Actually free all memory associated ctx->u.iptable.interface_name_list
Signed-off-by: Donald Sharp <sharpd@nvidia.com>
Diffstat (limited to 'zebra/zebra_dplane.c')
| -rw-r--r-- | zebra/zebra_dplane.c | 22 | 
1 files 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,  | 
