zebra: Actually free all memory associated ctx->u.iptable.interface_name_list

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
This commit is contained in:
Donald Sharp 2022-12-09 08:14:31 -05:00
parent 63e6e11f9f
commit 1cc380679e

View File

@ -833,20 +833,8 @@ static void dplane_ctx_free_internal(struct zebra_dplane_ctx *ctx)
break; break;
case DPLANE_OP_IPTABLE_ADD: case DPLANE_OP_IPTABLE_ADD:
case DPLANE_OP_IPTABLE_DELETE: case DPLANE_OP_IPTABLE_DELETE:
if (ctx->u.iptable.interface_name_list) { 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);
}
list_delete(&ctx->u.iptable.interface_name_list); list_delete(&ctx->u.iptable.interface_name_list);
}
break; break;
case DPLANE_OP_GRE_SET: case DPLANE_OP_GRE_SET:
case DPLANE_OP_INTF_NETCONFIG: case DPLANE_OP_INTF_NETCONFIG:
@ -3476,6 +3464,11 @@ static int dplane_ctx_rule_init(struct zebra_dplane_ctx *ctx,
return AOK; 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 * dplane_ctx_iptable_init() - Initialize a context block for a PBR iptable
* update. * update.
@ -3509,9 +3502,10 @@ static int dplane_ctx_iptable_init(struct zebra_dplane_ctx *ctx,
ctx->zd_vrf_id = iptable->vrf_id; ctx->zd_vrf_id = iptable->vrf_id;
memcpy(&ctx->u.iptable, iptable, sizeof(struct zebra_pbr_iptable)); memcpy(&ctx->u.iptable, iptable, sizeof(struct zebra_pbr_iptable));
ctx->u.iptable.interface_name_list = NULL;
if (iptable->nb_interface > 0) { if (iptable->nb_interface > 0) {
ctx->u.iptable.interface_name_list = list_new(); 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, for (ALL_LIST_ELEMENTS_RO(iptable->interface_name_list, node,
ifname)) { ifname)) {
listnode_add(ctx->u.iptable.interface_name_list, listnode_add(ctx->u.iptable.interface_name_list,