diff options
| author | Donald Sharp <donaldsharp72@gmail.com> | 2025-04-11 09:07:27 -0400 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-04-11 09:07:27 -0400 |
| commit | f163168c9521181326845b1d98e83f3325bf8508 (patch) | |
| tree | f131e07d8406b39f2595b3be73763e4fbd972b8e | |
| parent | 2c37a217432a7207f2001c9e95006f5be732089a (diff) | |
| parent | fe2a07aea4db279eb28459755288364013f690da (diff) | |
Merge pull request #18642 from louis-6wind/fix-asla-leak
isisd: fix asla memory leak
| -rw-r--r-- | isisd/isis_tlvs.c | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/isisd/isis_tlvs.c b/isisd/isis_tlvs.c index aa9d5e683b..41a17dbd1a 100644 --- a/isisd/isis_tlvs.c +++ b/isisd/isis_tlvs.c @@ -129,6 +129,7 @@ static int unpack_tlvs(enum isis_tlv_context context, size_t avail_len, struct stream *stream, struct sbuf *log, void *dest, int indent, bool *unpacked_known_tlvs); static void isis_free_subsubtlvs(struct isis_subsubtlvs *subsubtlvs); +static void isis_tlvs_del_asla_free(void *arg); /* For tests/isisd, TLV text requires ipv4-unicast instead of standard */ static const char *isis_mtid2str_fake(uint16_t mtid) @@ -147,6 +148,7 @@ struct isis_ext_subtlvs *isis_alloc_ext_subtlvs(void) init_item_list(&ext->adj_sid); init_item_list(&ext->lan_sid); ext->aslas = list_new(); + ext->aslas->del = isis_tlvs_del_asla_free; init_item_list(&ext->srv6_endx_sid); init_item_list(&ext->srv6_lan_endx_sid); @@ -8136,12 +8138,19 @@ void isis_tlvs_del_srv6_lan_endx_sid(struct isis_ext_subtlvs *exts, UNSET_SUBTLV(exts, EXT_SRV6_LAN_ENDX_SID); } +static void isis_tlvs_del_asla_free(void *arg) +{ + struct isis_asla_subtlvs *asla = arg; + + admin_group_term(&asla->ext_admin_group); + XFREE(MTYPE_ISIS_SUBTLV, asla); +} + void isis_tlvs_del_asla_flex_algo(struct isis_ext_subtlvs *ext, struct isis_asla_subtlvs *asla) { - admin_group_term(&asla->ext_admin_group); listnode_delete(ext->aslas, asla); - XFREE(MTYPE_ISIS_SUBTLV, asla); + isis_tlvs_del_asla_free(asla); } struct isis_asla_subtlvs * |
