From 6e9197093cd0942a6ddfd8ce24739419fe6e090d Mon Sep 17 00:00:00 2001 From: Donald Sharp Date: Wed, 26 Aug 2015 07:44:57 -0700 Subject: [PATCH] Fixup code to use correct XMALLOC operators Ticket: CM-7177 Reviewed-by: CCR-3396 Testing: See bug This code change does several small things: (A) Fix a couple detected memory leaks (B) Fix all malloc operations to use the correct XMALLOC operation in bgpd and parts of lib (C) Adds a few new memory types to make it easier to detect issues --- bgpd/bgp_debug.c | 6 +- bgpd/bgp_dump.c | 13 +-- bgpd/bgp_filter.c | 8 +- bgpd/bgp_mplsvpn.c | 1 + bgpd/bgp_route.c | 27 +++--- bgpd/bgp_updgrp.c | 39 +++++--- bgpd/bgp_vty.c | 12 ++- bgpd/bgp_zebra.c | 9 +- bgpd/bgpd.c | 234 ++++++++++++++++++++++++--------------------- lib/agentx.c | 4 +- lib/distribute.c | 36 +++---- lib/keychain.c | 12 +-- lib/log.c | 6 +- lib/memtypes.c | 10 +- 14 files changed, 227 insertions(+), 190 deletions(-) diff --git a/bgpd/bgp_debug.c b/bgpd/bgp_debug.c index 18628c1b8b..21bec01eca 100644 --- a/bgpd/bgp_debug.c +++ b/bgpd/bgp_debug.c @@ -211,7 +211,7 @@ bgp_debug_list_free(struct list *list) prefix_free(filter->p); if (filter->host) - XFREE (MTYPE_BGP_PEER_HOST, filter->host); + XFREE (MTYPE_BGP_DEBUG_STR, filter->host); XFREE (MTYPE_BGP_DEBUG_FILTER, filter); } @@ -296,7 +296,7 @@ bgp_debug_list_add_entry(struct list *list, const char *host, struct prefix *p) if (host) { - filter->host = XSTRDUP (MTYPE_BGP_PEER_HOST, host); + filter->host = XSTRDUP (MTYPE_BGP_DEBUG_STR, host); filter->p = NULL; } else if (p) @@ -319,7 +319,7 @@ bgp_debug_list_remove_entry(struct list *list, const char *host, struct prefix * if (host && strcmp (filter->host, host) == 0) { listnode_delete (list, filter); - XFREE (MTYPE_BGP_PEER_HOST, filter->host); + XFREE (MTYPE_BGP_DEBUG_STR, filter->host); XFREE (MTYPE_BGP_DEBUG_FILTER, filter); return 1; } diff --git a/bgpd/bgp_dump.c b/bgpd/bgp_dump.c index 9ee3285def..58c661227b 100644 --- a/bgpd/bgp_dump.c +++ b/bgpd/bgp_dump.c @@ -28,6 +28,7 @@ Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA #include "thread.h" #include "linklist.h" #include "queue.h" +#include "memory.h" #include "bgpd/bgp_table.h" @@ -614,8 +615,8 @@ bgp_dump_set (struct vty *vty, struct bgp_dump *bgp_dump, /* Set interval. */ bgp_dump->interval = interval; if (bgp_dump->interval_str) - free (bgp_dump->interval_str); - bgp_dump->interval_str = strdup (interval_str); + XFREE(MTYPE_BGP_DUMP_STR, bgp_dump->interval_str); + bgp_dump->interval_str = XSTRDUP(MTYPE_BGP_DUMP_STR, interval_str); } else @@ -631,8 +632,8 @@ bgp_dump_set (struct vty *vty, struct bgp_dump *bgp_dump, /* Set file name. */ if (bgp_dump->filename) - free (bgp_dump->filename); - bgp_dump->filename = strdup (path); + XFREE(MTYPE_BGP_DUMP_STR, bgp_dump->filename); + bgp_dump->filename = XSTRDUP(MTYPE_BGP_DUMP_STR, path); /* This should be called when interval is expired. */ bgp_dump_open_file (bgp_dump); @@ -646,7 +647,7 @@ bgp_dump_unset (struct vty *vty, struct bgp_dump *bgp_dump) /* Set file name. */ if (bgp_dump->filename) { - free (bgp_dump->filename); + XFREE(MTYPE_BGP_DUMP_STR, bgp_dump->filename); bgp_dump->filename = NULL; } @@ -668,7 +669,7 @@ bgp_dump_unset (struct vty *vty, struct bgp_dump *bgp_dump) if (bgp_dump->interval_str) { - free (bgp_dump->interval_str); + XFREE(MTYPE_BGP_DUMP_STR, bgp_dump->interval_str); bgp_dump->interval_str = NULL; } diff --git a/bgpd/bgp_filter.c b/bgpd/bgp_filter.c index 234085061c..693c639f75 100644 --- a/bgpd/bgp_filter.c +++ b/bgpd/bgp_filter.c @@ -189,7 +189,7 @@ as_list_free (struct as_list *aslist) { if (aslist->name) { - free (aslist->name); + XFREE(MTYPE_AS_STR, aslist->name); aslist->name = NULL; } XFREE (MTYPE_AS_LIST, aslist); @@ -208,7 +208,7 @@ as_list_insert (const char *name) /* Allocate new access_list and copy given name. */ aslist = as_list_new (); - aslist->name = strdup (name); + aslist->name = XSTRDUP(MTYPE_AS_STR, name); assert (aslist->name); /* If name is made by all digit character. We treat it as @@ -350,7 +350,7 @@ as_list_empty (struct as_list *aslist) static void as_list_filter_delete (struct as_list *aslist, struct as_filter *asfilter) { - char *name = strdup (aslist->name); + char *name = XSTRDUP(MTYPE_AS_STR, aslist->name); if (asfilter->next) asfilter->next->prev = asfilter->prev; @@ -372,7 +372,7 @@ as_list_filter_delete (struct as_list *aslist, struct as_filter *asfilter) if (as_list_master.delete_hook) (*as_list_master.delete_hook) (name); if (name) - free(name); + XFREE(MTYPE_AS_STR, name); } static int diff --git a/bgpd/bgp_mplsvpn.c b/bgpd/bgp_mplsvpn.c index 09f137fe4c..b667c4a2c8 100644 --- a/bgpd/bgp_mplsvpn.c +++ b/bgpd/bgp_mplsvpn.c @@ -243,6 +243,7 @@ str2prefix_rd (const char *str, struct prefix_rd *prd) } memcpy (prd->val, s->data, 8); + XFREE(MTYPE_TMP, half); return 1; } diff --git a/bgpd/bgp_route.c b/bgpd/bgp_route.c index 1f2346c743..3f26f0f620 100644 --- a/bgpd/bgp_route.c +++ b/bgpd/bgp_route.c @@ -36,6 +36,7 @@ Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA #include "thread.h" #include "workqueue.h" #include "queue.h" +#include "memory.h" #include "bgpd/bgpd.h" #include "bgpd/bgp_table.h" @@ -3919,7 +3920,7 @@ static void bgp_static_free (struct bgp_static *bgp_static) { if (bgp_static->rmap.name) - free (bgp_static->rmap.name); + XFREE(MTYPE_ROUTE_MAP_NAME, bgp_static->rmap.name); XFREE (MTYPE_BGP_STATIC, bgp_static); } @@ -4498,14 +4499,14 @@ bgp_static_set (struct vty *vty, struct bgp *bgp, const char *ip_str, if (rmap) { if (bgp_static->rmap.name) - free (bgp_static->rmap.name); - bgp_static->rmap.name = strdup (rmap); + XFREE(MTYPE_ROUTE_MAP_NAME, bgp_static->rmap.name); + bgp_static->rmap.name = XSTRDUP(MTYPE_ROUTE_MAP_NAME, rmap); bgp_static->rmap.map = route_map_lookup_by_name (rmap); } else { if (bgp_static->rmap.name) - free (bgp_static->rmap.name); + XFREE(MTYPE_ROUTE_MAP_NAME, bgp_static->rmap.name); bgp_static->rmap.name = NULL; bgp_static->rmap.map = NULL; bgp_static->valid = 0; @@ -4524,8 +4525,8 @@ bgp_static_set (struct vty *vty, struct bgp *bgp, const char *ip_str, if (rmap) { if (bgp_static->rmap.name) - free (bgp_static->rmap.name); - bgp_static->rmap.name = strdup (rmap); + XFREE(MTYPE_ROUTE_MAP_NAME, bgp_static->rmap.name); + bgp_static->rmap.name = XSTRDUP(MTYPE_ROUTE_MAP_NAME, rmap); bgp_static->rmap.map = route_map_lookup_by_name (rmap); } rn->info = bgp_static; @@ -4800,14 +4801,14 @@ bgp_table_map_set (struct vty *vty, struct bgp *bgp, afi_t afi, safi_t safi, if (rmap_name) { if (rmap->name) - free (rmap->name); - rmap->name = strdup (rmap_name); + XFREE(MTYPE_ROUTE_MAP_NAME, rmap->name); + rmap->name = XSTRDUP(MTYPE_ROUTE_MAP_NAME, rmap_name); rmap->map = route_map_lookup_by_name (rmap_name); } else { if (rmap->name) - free (rmap->name); + XFREE(MTYPE_ROUTE_MAP_NAME, rmap->name); rmap->name = NULL; rmap->map = NULL; } @@ -4825,7 +4826,7 @@ bgp_table_map_unset (struct vty *vty, struct bgp *bgp, afi_t afi, safi_t safi, rmap = &bgp->table_map[afi][safi]; if (rmap->name) - free (rmap->name); + XFREE(MTYPE_ROUTE_MAP_NAME, rmap->name); rmap->name = NULL; rmap->map = NULL; @@ -14587,11 +14588,11 @@ bgp_distance_set (struct vty *vty, const char *distance_str, /* Reset access-list configuration. */ if (bdistance->access_list) { - free (bdistance->access_list); + XFREE(MTYPE_AS_LIST, bdistance->access_list); bdistance->access_list = NULL; } if (access_list_str) - bdistance->access_list = strdup (access_list_str); + bdistance->access_list = XSTRDUP(MTYPE_AS_LIST, access_list_str); return CMD_SUCCESS; } @@ -14622,7 +14623,7 @@ bgp_distance_unset (struct vty *vty, const char *distance_str, bdistance = rn->info; if (bdistance->access_list) - free (bdistance->access_list); + XFREE(MTYPE_AS_LIST, bdistance->access_list); bgp_distance_free (bdistance); rn->info = NULL; diff --git a/bgpd/bgp_updgrp.c b/bgpd/bgp_updgrp.c index e06d2d3887..477bbb8c6e 100644 --- a/bgpd/bgp_updgrp.c +++ b/bgpd/bgp_updgrp.c @@ -144,7 +144,10 @@ conf_copy (struct peer *dst, struct peer *src, afi_t afi, safi_t safi) dst->v_routeadv = src->v_routeadv; dst->flags = src->flags; dst->af_flags[afi][safi] = src->af_flags[afi][safi]; - dst->host = XSTRDUP (MTYPE_BGP_PEER_HOST, src->host); + if (dst->host) + XFREE(MTYPE_BGP_PEER_HOST, dst->host); + + dst->host = XSTRDUP(MTYPE_BGP_PEER_HOST, src->host); dst->cap = src->cap; dst->af_cap[afi][safi] = src->af_cap[afi][safi]; dst->afc_nego[afi][safi] = src->afc_nego[afi][safi]; @@ -158,43 +161,43 @@ conf_copy (struct peer *dst, struct peer *src, afi_t afi, safi_t safi) if (src->default_rmap[afi][safi].name) { dst->default_rmap[afi][safi].name = - strdup (src->default_rmap[afi][safi].name); + XSTRDUP(MTYPE_ROUTE_MAP_NAME, src->default_rmap[afi][safi].name); dst->default_rmap[afi][safi].map = src->default_rmap[afi][safi].map; } if (DISTRIBUTE_OUT_NAME(srcfilter)) { - DISTRIBUTE_OUT_NAME(dstfilter) = strdup(DISTRIBUTE_OUT_NAME(srcfilter)); + DISTRIBUTE_OUT_NAME(dstfilter) = XSTRDUP(MTYPE_BGP_FILTER_NAME, DISTRIBUTE_OUT_NAME(srcfilter)); DISTRIBUTE_OUT(dstfilter) = DISTRIBUTE_OUT(srcfilter); } if (PREFIX_LIST_OUT_NAME(srcfilter)) { - PREFIX_LIST_OUT_NAME(dstfilter) = strdup(PREFIX_LIST_OUT_NAME(srcfilter)); + PREFIX_LIST_OUT_NAME(dstfilter) = XSTRDUP(MTYPE_BGP_FILTER_NAME, PREFIX_LIST_OUT_NAME(srcfilter)); PREFIX_LIST_OUT(dstfilter) = PREFIX_LIST_OUT(srcfilter); } if (FILTER_LIST_OUT_NAME(srcfilter)) { - FILTER_LIST_OUT_NAME(dstfilter) = strdup(FILTER_LIST_OUT_NAME(srcfilter)); + FILTER_LIST_OUT_NAME(dstfilter) = XSTRDUP(MTYPE_BGP_FILTER_NAME, FILTER_LIST_OUT_NAME(srcfilter)); FILTER_LIST_OUT(dstfilter) = FILTER_LIST_OUT(srcfilter); } if (ROUTE_MAP_OUT_NAME(srcfilter)) { - ROUTE_MAP_OUT_NAME(dstfilter) = strdup(ROUTE_MAP_OUT_NAME(srcfilter)); + ROUTE_MAP_OUT_NAME(dstfilter) = XSTRDUP(MTYPE_BGP_FILTER_NAME, ROUTE_MAP_OUT_NAME(srcfilter)); ROUTE_MAP_OUT(dstfilter) = ROUTE_MAP_OUT(srcfilter); } if (UNSUPPRESS_MAP_NAME(srcfilter)) { - UNSUPPRESS_MAP_NAME(dstfilter) = strdup(UNSUPPRESS_MAP_NAME(srcfilter)); + UNSUPPRESS_MAP_NAME(dstfilter) = XSTRDUP(MTYPE_BGP_FILTER_NAME, UNSUPPRESS_MAP_NAME(srcfilter)); UNSUPPRESS_MAP(dstfilter) = UNSUPPRESS_MAP(srcfilter); } } /** - * since we did a bunch of strdup's in conf_copy, time to free them up + * since we did a bunch of XSTRDUP's in conf_copy, time to free them up */ static void conf_release (struct peer *src, afi_t afi, safi_t safi) @@ -204,22 +207,22 @@ conf_release (struct peer *src, afi_t afi, safi_t safi) srcfilter = &src->filter[afi][safi]; if (src->default_rmap[afi][safi].name) - free (src->default_rmap[afi][safi].name); + XFREE(MTYPE_ROUTE_MAP_NAME, src->default_rmap[afi][safi].name); if (srcfilter->dlist[FILTER_OUT].name) - free (srcfilter->dlist[FILTER_OUT].name); + XFREE(MTYPE_BGP_FILTER_NAME, srcfilter->dlist[FILTER_OUT].name); if (srcfilter->plist[FILTER_OUT].name) - free (srcfilter->plist[FILTER_OUT].name); + XFREE(MTYPE_BGP_FILTER_NAME, srcfilter->plist[FILTER_OUT].name); if (srcfilter->aslist[FILTER_OUT].name) - free (srcfilter->aslist[FILTER_OUT].name); + XFREE(MTYPE_BGP_FILTER_NAME, srcfilter->aslist[FILTER_OUT].name); if (srcfilter->map[RMAP_OUT].name) - free (srcfilter->map[RMAP_OUT].name); + XFREE(MTYPE_BGP_FILTER_NAME, srcfilter->map[RMAP_OUT].name); if (srcfilter->usmap.name) - free (srcfilter->usmap.name); + XFREE(MTYPE_BGP_FILTER_NAME, srcfilter->usmap.name); } static void @@ -728,7 +731,13 @@ update_group_delete (struct update_group *updgrp) hash_release (updgrp->bgp->update_groups[updgrp->afid], updgrp); conf_release (updgrp->conf, updgrp->afi, updgrp->safi); - XFREE (MTYPE_BGP_PEER_HOST, updgrp->conf->host); + if (updgrp->conf->host) + XFREE(MTYPE_BGP_PEER_HOST, updgrp->conf->host); + updgrp->conf->host = NULL; + + if (updgrp->conf->ifname) + XFREE(MTYPE_BGP_PEER_IFNAME, updgrp->conf->ifname); + XFREE (MTYPE_BGP_PEER, updgrp->conf); XFREE (MTYPE_BGP_UPDGRP, updgrp); } diff --git a/bgpd/bgp_vty.c b/bgpd/bgp_vty.c index 7eaccf77d8..2612cdce07 100644 --- a/bgpd/bgp_vty.c +++ b/bgpd/bgp_vty.c @@ -3751,22 +3751,24 @@ peer_rsclient_set_vty (struct vty *vty, const char *peer_str, /* Import policy. */ if (pfilter->map[RMAP_IMPORT].name) - free (pfilter->map[RMAP_IMPORT].name); + XFREE(MTYPE_BGP_FILTER_NAME, pfilter->map[RMAP_IMPORT].name); if (gfilter->map[RMAP_IMPORT].name) { - pfilter->map[RMAP_IMPORT].name = strdup (gfilter->map[RMAP_IMPORT].name); + pfilter->map[RMAP_IMPORT].name = XSTRDUP(MTYPE_BGP_FILTER_NAME, + gfilter->map[RMAP_IMPORT].name); pfilter->map[RMAP_IMPORT].map = gfilter->map[RMAP_IMPORT].map; } else { pfilter->map[RMAP_IMPORT].name = NULL; - pfilter->map[RMAP_IMPORT].map =NULL; + pfilter->map[RMAP_IMPORT].map = NULL; } /* Export policy. */ if (gfilter->map[RMAP_EXPORT].name && ! pfilter->map[RMAP_EXPORT].name) { - pfilter->map[RMAP_EXPORT].name = strdup (gfilter->map[RMAP_EXPORT].name); + pfilter->map[RMAP_EXPORT].name = XSTRDUP(MTYPE_BGP_FILTER_NAME, + gfilter->map[RMAP_EXPORT].name); pfilter->map[RMAP_EXPORT].map = gfilter->map[RMAP_EXPORT].map; } } @@ -8325,7 +8327,7 @@ DEFUN (show_bgp_memory, count * sizeof (struct peer)), VTY_NEWLINE); - if ((count = mtype_stats_alloc (MTYPE_PEER_GROUP))) + if ((count = mtype_stats_alloc (MTYPE_BGP_PEER_GROUP))) vty_out (vty, "%ld peer groups, using %s of memory%s", count, mtype_memstr (memstrbuf, sizeof (memstrbuf), count * sizeof (struct peer_group)), diff --git a/bgpd/bgp_zebra.c b/bgpd/bgp_zebra.c index cb28b5cb30..f96fbfa6d9 100644 --- a/bgpd/bgp_zebra.c +++ b/bgpd/bgp_zebra.c @@ -30,6 +30,7 @@ Boston, MA 02111-1307, USA. */ #include "routemap.h" #include "thread.h" #include "queue.h" +#include "memory.h" #include "lib/json.h" #include "bgpd/bgpd.h" @@ -1516,7 +1517,7 @@ bgp_redist_add (struct bgp *bgp, afi_t afi, u_char type, u_short instance) bgp->redist[afi][type] = list_new(); red_list = bgp->redist[afi][type]; - red = (struct bgp_redist *)calloc (1, sizeof(struct bgp_redist)); + red = (struct bgp_redist *)XCALLOC(MTYPE_BGP_REDIST, sizeof(struct bgp_redist)); red->instance = instance; listnode_add(red_list, red); @@ -1594,8 +1595,8 @@ bgp_redistribute_rmap_set (struct bgp_redist *red, const char *name) return 0; if (red->rmap.name) - free (red->rmap.name); - red->rmap.name = strdup (name); + XFREE(MTYPE_ROUTE_MAP_NAME, red->rmap.name); + red->rmap.name = XSTRDUP(MTYPE_ROUTE_MAP_NAME, name); red->rmap.map = route_map_lookup_by_name (name); return 1; @@ -1641,7 +1642,7 @@ bgp_redistribute_unset (struct bgp *bgp, afi_t afi, int type, u_short instance) /* Unset route-map. */ if (red->rmap.name) - free (red->rmap.name); + XFREE(MTYPE_ROUTE_MAP_NAME, red->rmap.name); red->rmap.name = NULL; red->rmap.map = NULL; diff --git a/bgpd/bgpd.c b/bgpd/bgpd.c index 3d6553cac2..976e614daa 100644 --- a/bgpd/bgpd.c +++ b/bgpd/bgpd.c @@ -719,17 +719,17 @@ peer_af_flag_reset (struct peer *peer, afi_t afi, safi_t safi) { if (filter->dlist[i].name) { - free (filter->dlist[i].name); + XFREE(MTYPE_BGP_FILTER_NAME, filter->dlist[i].name); filter->dlist[i].name = NULL; } if (filter->plist[i].name) { - free (filter->plist[i].name); + XFREE(MTYPE_BGP_FILTER_NAME, filter->plist[i].name); filter->plist[i].name = NULL; } if (filter->aslist[i].name) { - free (filter->aslist[i].name); + XFREE(MTYPE_BGP_FILTER_NAME, filter->aslist[i].name); filter->aslist[i].name = NULL; } } @@ -737,14 +737,14 @@ peer_af_flag_reset (struct peer *peer, afi_t afi, safi_t safi) { if (filter->map[i].name) { - free (filter->map[i].name); + XFREE(MTYPE_BGP_FILTER_NAME, filter->map[i].name); filter->map[i].name = NULL; } } /* Clear unsuppress map. */ if (filter->usmap.name) - free (filter->usmap.name); + XFREE(MTYPE_BGP_FILTER_NAME, filter->usmap.name); filter->usmap.name = NULL; filter->usmap.map = NULL; @@ -771,7 +771,7 @@ peer_af_flag_reset (struct peer *peer, afi_t afi, safi_t safi) /* Clear neighbor default_originate_rmap */ if (peer->default_rmap[afi][safi].name) - free (peer->default_rmap[afi][safi].name); + XFREE(MTYPE_ROUTE_MAP_NAME, peer->default_rmap[afi][safi].name); peer->default_rmap[afi][safi].name = NULL; peer->default_rmap[afi][safi].map = NULL; @@ -939,17 +939,22 @@ peer_free (struct peer *peer) /* Free allocated host character. */ if (peer->host) XFREE (MTYPE_BGP_PEER_HOST, peer->host); - + peer->host = NULL; + + if (peer->ifname) + XFREE(MTYPE_BGP_PEER_IFNAME, peer->ifname); + peer->ifname = NULL; + /* Update source configuration. */ if (peer->update_source) sockunion_free (peer->update_source); if (peer->update_if) XFREE (MTYPE_PEER_UPDATE_SOURCE, peer->update_if); - - if (peer->clear_node_queue) - work_queue_free (peer->clear_node_queue); - + + if (peer->notify.data) + XFREE(MTYPE_TMP, peer->notify.data); + bgp_sync_delete (peer); if (peer->conf_if) @@ -1157,9 +1162,9 @@ peer_xfer_config (struct peer *peer_dst, struct peer *peer_src) if (peer_src->ifname) { if (peer_dst->ifname) - free(peer_dst->ifname); + XFREE(MTYPE_BGP_PEER_IFNAME, peer_dst->ifname); - peer_dst->ifname = strdup(peer_src->ifname); + peer_dst->ifname = XSTRDUP(MTYPE_BGP_PEER_IFNAME, peer_src->ifname); } } @@ -1256,12 +1261,16 @@ peer_create (union sockunion *su, const char *conf_if, struct bgp *bgp, { peer->conf_if = XSTRDUP (MTYPE_PEER_CONF_IF, conf_if); bgp_peer_conf_if_to_su_update(peer); + if (peer->host) + XFREE(MTYPE_BGP_PEER_HOST, peer->host); peer->host = XSTRDUP (MTYPE_BGP_PEER_HOST, conf_if); } else if (su) { peer->su = *su; sockunion2str (su, buf, SU_ADDRSTRLEN); + if (peer->host) + XFREE(MTYPE_BGP_PEER_HOST, peer->host); peer->host = XSTRDUP (MTYPE_BGP_PEER_HOST, buf); } peer->local_as = local_as; @@ -1802,11 +1811,11 @@ peer_delete (struct peer *peer) for (i = FILTER_IN; i < FILTER_MAX; i++) { if (filter->dlist[i].name) - free (filter->dlist[i].name); + XFREE(MTYPE_BGP_FILTER_NAME, filter->dlist[i].name); if (filter->plist[i].name) - free (filter->plist[i].name); + XFREE(MTYPE_BGP_FILTER_NAME, filter->plist[i].name); if (filter->aslist[i].name) - free (filter->aslist[i].name); + XFREE(MTYPE_BGP_FILTER_NAME, filter->aslist[i].name); filter->dlist[i].name = NULL; filter->plist[i].name = NULL; @@ -1815,15 +1824,15 @@ peer_delete (struct peer *peer) for (i = RMAP_IN; i < RMAP_MAX; i++) { if (filter->map[i].name) - free (filter->map[i].name); + XFREE(MTYPE_BGP_FILTER_NAME, filter->map[i].name); filter->map[i].name = NULL; } if (filter->usmap.name) - free (filter->usmap.name); + XFREE(MTYPE_BGP_FILTER_NAME, filter->usmap.name); if (peer->default_rmap[afi][safi].name) - free (peer->default_rmap[afi][safi].name); + XFREE(MTYPE_ROUTE_MAP_NAME, peer->default_rmap[afi][safi].name); filter->usmap.name = NULL; peer->default_rmap[afi][safi].name = NULL; @@ -1846,14 +1855,14 @@ peer_group_cmp (struct peer_group *g1, struct peer_group *g2) static struct peer_group * peer_group_new (void) { - return (struct peer_group *) XCALLOC (MTYPE_PEER_GROUP, + return (struct peer_group *) XCALLOC (MTYPE_BGP_PEER_GROUP, sizeof (struct peer_group)); } static void peer_group_free (struct peer_group *group) { - XFREE (MTYPE_PEER_GROUP, group); + XFREE (MTYPE_BGP_PEER_GROUP, group); } struct peer_group * @@ -1882,13 +1891,17 @@ peer_group_get (struct bgp *bgp, const char *name) group = peer_group_new (); group->bgp = bgp; - group->name = strdup (name); + if (group->name) + XFREE(MTYPE_BGP_PEER_GROUP_HOST, group->name); + group->name = XSTRDUP(MTYPE_BGP_PEER_GROUP_HOST, name); group->peer = list_new (); for (afi = AFI_IP; afi < AFI_MAX; afi++) group->listen_range[afi] = list_new (); group->conf = peer_new (bgp); if (! bgp_flag_check (bgp, BGP_FLAG_NO_DEFAULT_IPV4)) group->conf->afc[AFI_IP][SAFI_UNICAST] = 1; + if (group->conf->host) + XFREE(MTYPE_BGP_PEER_HOST, group->conf->host); group->conf->host = XSTRDUP (MTYPE_BGP_PEER_HOST, name); group->conf->group = group; group->conf->as = 0; @@ -1992,10 +2005,10 @@ peer_group2peer_config_copy (struct peer_group *group, struct peer *peer, /* Import policy. */ if (pfilter->map[RMAP_IMPORT].name) - free (pfilter->map[RMAP_IMPORT].name); + XFREE(MTYPE_BGP_FILTER_NAME, pfilter->map[RMAP_IMPORT].name); if (gfilter->map[RMAP_IMPORT].name) { - pfilter->map[RMAP_IMPORT].name = strdup (gfilter->map[RMAP_IMPORT].name); + pfilter->map[RMAP_IMPORT].name = XSTRDUP(MTYPE_BGP_FILTER_NAME, gfilter->map[RMAP_IMPORT].name); pfilter->map[RMAP_IMPORT].map = gfilter->map[RMAP_IMPORT].map; } else @@ -2007,7 +2020,7 @@ peer_group2peer_config_copy (struct peer_group *group, struct peer *peer, /* Export policy. */ if (gfilter->map[RMAP_EXPORT].name && ! pfilter->map[RMAP_EXPORT].name) { - pfilter->map[RMAP_EXPORT].name = strdup (gfilter->map[RMAP_EXPORT].name); + pfilter->map[RMAP_EXPORT].name = XSTRDUP(MTYPE_BGP_FILTER_NAME, gfilter->map[RMAP_EXPORT].name); pfilter->map[RMAP_EXPORT].map = gfilter->map[RMAP_EXPORT].map; } } @@ -2016,8 +2029,8 @@ peer_group2peer_config_copy (struct peer_group *group, struct peer *peer, if (conf->default_rmap[afi][safi].name) { if (peer->default_rmap[afi][safi].name) - free (peer->default_rmap[afi][safi].name); - peer->default_rmap[afi][safi].name = strdup (conf->default_rmap[afi][safi].name); + XFREE(MTYPE_BGP_FILTER_NAME, peer->default_rmap[afi][safi].name); + peer->default_rmap[afi][safi].name = XSTRDUP(MTYPE_BGP_FILTER_NAME, conf->default_rmap[afi][safi].name); peer->default_rmap[afi][safi].map = conf->default_rmap[afi][safi].map; } @@ -2036,7 +2049,7 @@ peer_group2peer_config_copy (struct peer_group *group, struct peer *peer, else if (conf->update_if) { if (peer->update_if) - XFREE (MTYPE_PEER_UPDATE_SOURCE, peer->update_if); + XFREE(MTYPE_PEER_UPDATE_SOURCE, peer->update_if); if (peer->update_source) { sockunion_free (peer->update_source); @@ -2049,29 +2062,29 @@ peer_group2peer_config_copy (struct peer_group *group, struct peer *peer, if (gfilter->dlist[in].name && ! pfilter->dlist[in].name) { if (pfilter->dlist[in].name) - free (pfilter->dlist[in].name); - pfilter->dlist[in].name = strdup (gfilter->dlist[in].name); + XFREE(MTYPE_BGP_FILTER_NAME, pfilter->dlist[in].name); + pfilter->dlist[in].name = XSTRDUP(MTYPE_BGP_FILTER_NAME, gfilter->dlist[in].name); pfilter->dlist[in].alist = gfilter->dlist[in].alist; } if (gfilter->plist[in].name && ! pfilter->plist[in].name) { if (pfilter->plist[in].name) - free (pfilter->plist[in].name); - pfilter->plist[in].name = strdup (gfilter->plist[in].name); + XFREE(MTYPE_BGP_FILTER_NAME, pfilter->plist[in].name); + pfilter->plist[in].name = XSTRDUP(MTYPE_BGP_FILTER_NAME, gfilter->plist[in].name); pfilter->plist[in].plist = gfilter->plist[in].plist; } if (gfilter->aslist[in].name && ! pfilter->aslist[in].name) { if (pfilter->aslist[in].name) - free (pfilter->aslist[in].name); - pfilter->aslist[in].name = strdup (gfilter->aslist[in].name); + XFREE(MTYPE_BGP_FILTER_NAME, pfilter->aslist[in].name); + pfilter->aslist[in].name = XSTRDUP(MTYPE_BGP_FILTER_NAME, gfilter->aslist[in].name); pfilter->aslist[in].aslist = gfilter->aslist[in].aslist; } if (gfilter->map[RMAP_IN].name && ! pfilter->map[RMAP_IN].name) { if (pfilter->map[RMAP_IN].name) - free (pfilter->map[RMAP_IN].name); - pfilter->map[RMAP_IN].name = strdup (gfilter->map[RMAP_IN].name); + XFREE(MTYPE_BGP_FILTER_NAME, pfilter->map[RMAP_IN].name); + pfilter->map[RMAP_IN].name = XSTRDUP(MTYPE_BGP_FILTER_NAME, gfilter->map[RMAP_IN].name); pfilter->map[RMAP_IN].map = gfilter->map[RMAP_IN].map; } @@ -2079,56 +2092,56 @@ peer_group2peer_config_copy (struct peer_group *group, struct peer *peer, if (gfilter->dlist[out].name) { if (pfilter->dlist[out].name) - free (pfilter->dlist[out].name); - pfilter->dlist[out].name = strdup (gfilter->dlist[out].name); + XFREE(MTYPE_BGP_FILTER_NAME, pfilter->dlist[out].name); + pfilter->dlist[out].name = XSTRDUP(MTYPE_BGP_FILTER_NAME, gfilter->dlist[out].name); pfilter->dlist[out].alist = gfilter->dlist[out].alist; } else { if (pfilter->dlist[out].name) - free (pfilter->dlist[out].name); + XFREE(MTYPE_BGP_FILTER_NAME, pfilter->dlist[out].name); pfilter->dlist[out].name = NULL; pfilter->dlist[out].alist = NULL; } if (gfilter->plist[out].name) { if (pfilter->plist[out].name) - free (pfilter->plist[out].name); - pfilter->plist[out].name = strdup (gfilter->plist[out].name); + XFREE(MTYPE_BGP_FILTER_NAME, pfilter->plist[out].name); + pfilter->plist[out].name = XSTRDUP(MTYPE_BGP_FILTER_NAME, gfilter->plist[out].name); pfilter->plist[out].plist = gfilter->plist[out].plist; } else { if (pfilter->plist[out].name) - free (pfilter->plist[out].name); + XFREE(MTYPE_BGP_FILTER_NAME, pfilter->plist[out].name); pfilter->plist[out].name = NULL; pfilter->plist[out].plist = NULL; } if (gfilter->aslist[out].name) { if (pfilter->aslist[out].name) - free (pfilter->aslist[out].name); - pfilter->aslist[out].name = strdup (gfilter->aslist[out].name); + XFREE(MTYPE_BGP_FILTER_NAME, pfilter->aslist[out].name); + pfilter->aslist[out].name = XSTRDUP(MTYPE_BGP_FILTER_NAME, gfilter->aslist[out].name); pfilter->aslist[out].aslist = gfilter->aslist[out].aslist; } else { if (pfilter->aslist[out].name) - free (pfilter->aslist[out].name); + XFREE(MTYPE_BGP_FILTER_NAME, pfilter->aslist[out].name); pfilter->aslist[out].name = NULL; pfilter->aslist[out].aslist = NULL; } if (gfilter->map[RMAP_OUT].name) { if (pfilter->map[RMAP_OUT].name) - free (pfilter->map[RMAP_OUT].name); - pfilter->map[RMAP_OUT].name = strdup (gfilter->map[RMAP_OUT].name); + XFREE(MTYPE_BGP_FILTER_NAME, pfilter->map[RMAP_OUT].name); + pfilter->map[RMAP_OUT].name = XSTRDUP(MTYPE_BGP_FILTER_NAME, gfilter->map[RMAP_OUT].name); pfilter->map[RMAP_OUT].map = gfilter->map[RMAP_OUT].map; } else { if (pfilter->map[RMAP_OUT].name) - free (pfilter->map[RMAP_OUT].name); + XFREE(MTYPE_BGP_FILTER_NAME, pfilter->map[RMAP_OUT].name); pfilter->map[RMAP_OUT].name = NULL; pfilter->map[RMAP_OUT].map = NULL; } @@ -2137,36 +2150,36 @@ peer_group2peer_config_copy (struct peer_group *group, struct peer *peer, if (gfilter->map[RMAP_IMPORT].name) { if (pfilter->map[RMAP_IMPORT].name) - free (pfilter->map[RMAP_IMPORT].name); - pfilter->map[RMAP_IMPORT].name = strdup (gfilter->map[RMAP_IMPORT].name); + XFREE(MTYPE_BGP_FILTER_NAME, pfilter->map[RMAP_IMPORT].name); + pfilter->map[RMAP_IMPORT].name = XSTRDUP(MTYPE_BGP_FILTER_NAME, gfilter->map[RMAP_IMPORT].name); pfilter->map[RMAP_IMPORT].map = gfilter->map[RMAP_IMPORT].map; } else { if (pfilter->map[RMAP_IMPORT].name) - free (pfilter->map[RMAP_IMPORT].name); + XFREE(MTYPE_BGP_FILTER_NAME, pfilter->map[RMAP_IMPORT].name); pfilter->map[RMAP_IMPORT].name = NULL; pfilter->map[RMAP_IMPORT].map = NULL; } if (gfilter->map[RMAP_EXPORT].name && ! pfilter->map[RMAP_EXPORT].name) { if (pfilter->map[RMAP_EXPORT].name) - free (pfilter->map[RMAP_EXPORT].name); - pfilter->map[RMAP_EXPORT].name = strdup (gfilter->map[RMAP_EXPORT].name); + XFREE(MTYPE_BGP_FILTER_NAME, pfilter->map[RMAP_EXPORT].name); + pfilter->map[RMAP_EXPORT].name = XSTRDUP(MTYPE_BGP_FILTER_NAME, gfilter->map[RMAP_EXPORT].name); pfilter->map[RMAP_EXPORT].map = gfilter->map[RMAP_EXPORT].map; } if (gfilter->usmap.name) { if (pfilter->usmap.name) - free (pfilter->usmap.name); - pfilter->usmap.name = strdup (gfilter->usmap.name); + XFREE(MTYPE_BGP_FILTER_NAME, pfilter->usmap.name); + pfilter->usmap.name = XSTRDUP(MTYPE_BGP_FILTER_NAME, gfilter->usmap.name); pfilter->usmap.map = gfilter->usmap.map; } else { if (pfilter->usmap.name) - free (pfilter->usmap.name); + XFREE(MTYPE_BGP_FILTER_NAME, pfilter->usmap.name); pfilter->usmap.name = NULL; pfilter->usmap.map = NULL; } @@ -2237,7 +2250,7 @@ peer_group_delete (struct peer_group *group) list_delete (group->listen_range[afi]); } - free (group->name); + XFREE(MTYPE_BGP_PEER_HOST, group->name); group->name = NULL; group->conf->group = NULL; @@ -2486,7 +2499,7 @@ peer_group_bind (struct bgp *bgp, union sockunion *su, struct peer *peer, /* Import policy. */ if (peer->filter[afi][safi].map[RMAP_IMPORT].name) { - free (peer->filter[afi][safi].map[RMAP_IMPORT].name); + XFREE(MTYPE_BGP_FILTER_NAME, peer->filter[afi][safi].map[RMAP_IMPORT].name); peer->filter[afi][safi].map[RMAP_IMPORT].name = NULL; peer->filter[afi][safi].map[RMAP_IMPORT].map = NULL; } @@ -2495,7 +2508,7 @@ peer_group_bind (struct bgp *bgp, union sockunion *su, struct peer *peer, if (! CHECK_FLAG(group->conf->af_flags[afi][safi], PEER_FLAG_RSERVER_CLIENT) && peer->filter[afi][safi].map[RMAP_EXPORT].name) { - free (peer->filter[afi][safi].map[RMAP_EXPORT].name); + XFREE(MTYPE_BGP_FILTER_NAME, peer->filter[afi][safi].map[RMAP_EXPORT].name); peer->filter[afi][safi].map[RMAP_EXPORT].name = NULL; peer->filter[afi][safi].map[RMAP_EXPORT].map = NULL; } @@ -2602,8 +2615,9 @@ bgp_create (as_t *as, const char *name) bgp_lock (bgp); bgp->peer_self = peer_new (bgp); - bgp->peer_self->host = XSTRDUP (MTYPE_BGP_PEER_HOST, "Static announcement"); - + if (bgp->peer_self->host) + XFREE(MTYPE_BGP_PEER_HOST, bgp->peer_self->host); + bgp->peer_self->host = XSTRDUP(MTYPE_BGP_PEER_HOST, "Static announcement"); bgp->peer = list_new (); bgp->peer->cmp = (int (*)(void *, void *)) peer_cmp; @@ -2636,7 +2650,7 @@ bgp_create (as_t *as, const char *name) bgp->as = *as; if (name) - bgp->name = strdup (name); + bgp->name = XSTRDUP(MTYPE_BGP, name); bgp->wpkt_quanta = BGP_WRITE_PACKET_MAX; bgp->coalesce_time = BGP_DEFAULT_SUBGROUP_COALESCE_TIME; @@ -2867,7 +2881,7 @@ bgp_free (struct bgp *bgp) list_delete (bgp->rsclient); if (bgp->name) - free (bgp->name); + XFREE(MTYPE_BGP, bgp->name); for (afi = AFI_IP; afi < AFI_MAX; afi++) for (safi = SAFI_UNICAST; safi < SAFI_MAX; safi++) @@ -3981,8 +3995,8 @@ peer_default_originate_set (struct peer *peer, afi_t afi, safi_t safi, if (rmap) { if (peer->default_rmap[afi][safi].name) - free (peer->default_rmap[afi][safi].name); - peer->default_rmap[afi][safi].name = strdup (rmap); + XFREE(MTYPE_ROUTE_MAP_NAME, peer->default_rmap[afi][safi].name); + peer->default_rmap[afi][safi].name = XSTRDUP(MTYPE_ROUTE_MAP_NAME, rmap); peer->default_rmap[afi][safi].map = route_map_lookup_by_name (rmap); } } @@ -4006,8 +4020,8 @@ peer_default_originate_set (struct peer *peer, afi_t afi, safi_t safi, if (rmap) { if (peer->default_rmap[afi][safi].name) - free (peer->default_rmap[afi][safi].name); - peer->default_rmap[afi][safi].name = strdup (rmap); + XFREE(MTYPE_ROUTE_MAP_NAME, peer->default_rmap[afi][safi].name); + peer->default_rmap[afi][safi].name = XSTRDUP(MTYPE_ROUTE_MAP_NAME, rmap); peer->default_rmap[afi][safi].map = route_map_lookup_by_name (rmap); } @@ -4039,7 +4053,7 @@ peer_default_originate_unset (struct peer *peer, afi_t afi, safi_t safi) UNSET_FLAG (peer->af_flags[afi][safi], PEER_FLAG_DEFAULT_ORIGINATE); if (peer->default_rmap[afi][safi].name) - free (peer->default_rmap[afi][safi].name); + XFREE(MTYPE_ROUTE_MAP_NAME, peer->default_rmap[afi][safi].name); peer->default_rmap[afi][safi].name = NULL; peer->default_rmap[afi][safi].map = NULL; } @@ -4061,7 +4075,7 @@ peer_default_originate_unset (struct peer *peer, afi_t afi, safi_t safi) UNSET_FLAG (peer->af_flags[afi][safi], PEER_FLAG_DEFAULT_ORIGINATE); if (peer->default_rmap[afi][safi].name) - free (peer->default_rmap[afi][safi].name); + XFREE(MTYPE_ROUTE_MAP_NAME, peer->default_rmap[afi][safi].name); peer->default_rmap[afi][safi].name = NULL; peer->default_rmap[afi][safi].map = NULL; @@ -4355,15 +4369,15 @@ void peer_interface_set (struct peer *peer, const char *str) { if (peer->ifname) - free (peer->ifname); - peer->ifname = strdup (str); + XFREE(MTYPE_BGP_PEER_IFNAME, peer->ifname); + peer->ifname = XSTRDUP(MTYPE_BGP_PEER_IFNAME, str); } void peer_interface_unset (struct peer *peer) { if (peer->ifname) - free (peer->ifname); + XFREE(MTYPE_BGP_PEER_IFNAME, peer->ifname); peer->ifname = NULL; } @@ -4712,8 +4726,8 @@ peer_distribute_set (struct peer *peer, afi_t afi, safi_t safi, int direct, return BGP_ERR_PEER_FILTER_CONFLICT; if (filter->dlist[direct].name) - free (filter->dlist[direct].name); - filter->dlist[direct].name = strdup (name); + XFREE(MTYPE_BGP_FILTER_NAME, filter->dlist[direct].name); + filter->dlist[direct].name = XSTRDUP(MTYPE_BGP_FILTER_NAME, name); filter->dlist[direct].alist = access_list_lookup (afi, name); if (! CHECK_FLAG (peer->sflags, PEER_STATUS_GROUP)) @@ -4732,8 +4746,8 @@ peer_distribute_set (struct peer *peer, afi_t afi, safi_t safi, int direct, continue; if (filter->dlist[direct].name) - free (filter->dlist[direct].name); - filter->dlist[direct].name = strdup (name); + XFREE(MTYPE_BGP_FILTER_NAME, filter->dlist[direct].name); + filter->dlist[direct].name = XSTRDUP(MTYPE_BGP_FILTER_NAME, name); filter->dlist[direct].alist = access_list_lookup (afi, name); peer_on_policy_change(peer, afi, safi, (direct == FILTER_OUT) ? 1 : 0); @@ -4769,8 +4783,8 @@ peer_distribute_unset (struct peer *peer, afi_t afi, safi_t safi, int direct) if (gfilter->dlist[direct].name) { if (filter->dlist[direct].name) - free (filter->dlist[direct].name); - filter->dlist[direct].name = strdup (gfilter->dlist[direct].name); + XFREE(MTYPE_BGP_FILTER_NAME, filter->dlist[direct].name); + filter->dlist[direct].name = XSTRDUP(MTYPE_BGP_FILTER_NAME, gfilter->dlist[direct].name); filter->dlist[direct].alist = gfilter->dlist[direct].alist; peer_on_policy_change(peer, afi, safi, (direct == FILTER_OUT) ? 1 : 0); @@ -4779,7 +4793,7 @@ peer_distribute_unset (struct peer *peer, afi_t afi, safi_t safi, int direct) } if (filter->dlist[direct].name) - free (filter->dlist[direct].name); + XFREE(MTYPE_BGP_FILTER_NAME, filter->dlist[direct].name); filter->dlist[direct].name = NULL; filter->dlist[direct].alist = NULL; @@ -4799,7 +4813,7 @@ peer_distribute_unset (struct peer *peer, afi_t afi, safi_t safi, int direct) continue; if (filter->dlist[direct].name) - free (filter->dlist[direct].name); + XFREE(MTYPE_BGP_FILTER_NAME, filter->dlist[direct].name); filter->dlist[direct].name = NULL; filter->dlist[direct].alist = NULL; peer_on_policy_change(peer, afi, safi, @@ -4889,8 +4903,8 @@ peer_prefix_list_set (struct peer *peer, afi_t afi, safi_t safi, int direct, return BGP_ERR_PEER_FILTER_CONFLICT; if (filter->plist[direct].name) - free (filter->plist[direct].name); - filter->plist[direct].name = strdup (name); + XFREE(MTYPE_BGP_FILTER_NAME, filter->plist[direct].name); + filter->plist[direct].name = XSTRDUP(MTYPE_BGP_FILTER_NAME, name); filter->plist[direct].plist = prefix_list_lookup (afi, name); if (! CHECK_FLAG (peer->sflags, PEER_STATUS_GROUP)) @@ -4909,8 +4923,8 @@ peer_prefix_list_set (struct peer *peer, afi_t afi, safi_t safi, int direct, continue; if (filter->plist[direct].name) - free (filter->plist[direct].name); - filter->plist[direct].name = strdup (name); + XFREE(MTYPE_BGP_FILTER_NAME, filter->plist[direct].name); + filter->plist[direct].name = XSTRDUP(MTYPE_BGP_FILTER_NAME, name); filter->plist[direct].plist = prefix_list_lookup (afi, name); peer_on_policy_change(peer, afi, safi, (direct == FILTER_OUT) ? 1 : 0); @@ -4945,8 +4959,8 @@ peer_prefix_list_unset (struct peer *peer, afi_t afi, safi_t safi, int direct) if (gfilter->plist[direct].name) { if (filter->plist[direct].name) - free (filter->plist[direct].name); - filter->plist[direct].name = strdup (gfilter->plist[direct].name); + XSTRDUP(MTYPE_BGP_FILTER_NAME, filter->plist[direct].name); + filter->plist[direct].name = XSTRDUP(MTYPE_BGP_FILTER_NAME, gfilter->plist[direct].name); filter->plist[direct].plist = gfilter->plist[direct].plist; peer_on_policy_change(peer, afi, safi, (direct == FILTER_OUT) ? 1 : 0); @@ -4955,7 +4969,7 @@ peer_prefix_list_unset (struct peer *peer, afi_t afi, safi_t safi, int direct) } if (filter->plist[direct].name) - free (filter->plist[direct].name); + XFREE(MTYPE_BGP_FILTER_NAME, filter->plist[direct].name); filter->plist[direct].name = NULL; filter->plist[direct].plist = NULL; @@ -4975,7 +4989,7 @@ peer_prefix_list_unset (struct peer *peer, afi_t afi, safi_t safi, int direct) continue; if (filter->plist[direct].name) - free (filter->plist[direct].name); + XFREE(MTYPE_BGP_FILTER_NAME, filter->plist[direct].name); filter->plist[direct].name = NULL; filter->plist[direct].plist = NULL; peer_on_policy_change(peer, afi, safi, @@ -5065,8 +5079,8 @@ peer_aslist_set (struct peer *peer, afi_t afi, safi_t safi, int direct, filter = &peer->filter[afi][safi]; if (filter->aslist[direct].name) - free (filter->aslist[direct].name); - filter->aslist[direct].name = strdup (name); + XFREE(MTYPE_BGP_FILTER_NAME, filter->aslist[direct].name); + filter->aslist[direct].name = XSTRDUP(MTYPE_BGP_FILTER_NAME, name); filter->aslist[direct].aslist = as_list_lookup (name); if (! CHECK_FLAG (peer->sflags, PEER_STATUS_GROUP)) @@ -5085,8 +5099,8 @@ peer_aslist_set (struct peer *peer, afi_t afi, safi_t safi, int direct, continue; if (filter->aslist[direct].name) - free (filter->aslist[direct].name); - filter->aslist[direct].name = strdup (name); + XFREE(MTYPE_BGP_FILTER_NAME, filter->aslist[direct].name); + filter->aslist[direct].name = XSTRDUP(MTYPE_BGP_FILTER_NAME, name); filter->aslist[direct].aslist = as_list_lookup (name); peer_on_policy_change(peer, afi, safi, (direct == FILTER_OUT) ? 1 : 0); @@ -5121,8 +5135,8 @@ peer_aslist_unset (struct peer *peer,afi_t afi, safi_t safi, int direct) if (gfilter->aslist[direct].name) { if (filter->aslist[direct].name) - free (filter->aslist[direct].name); - filter->aslist[direct].name = strdup (gfilter->aslist[direct].name); + XFREE(MTYPE_BGP_FILTER_NAME, filter->aslist[direct].name); + filter->aslist[direct].name = XSTRDUP(MTYPE_BGP_FILTER_NAME, gfilter->aslist[direct].name); filter->aslist[direct].aslist = gfilter->aslist[direct].aslist; peer_on_policy_change(peer, afi, safi, (direct == FILTER_OUT) ? 1 : 0); @@ -5131,7 +5145,7 @@ peer_aslist_unset (struct peer *peer,afi_t afi, safi_t safi, int direct) } if (filter->aslist[direct].name) - free (filter->aslist[direct].name); + XFREE(MTYPE_BGP_FILTER_NAME, filter->aslist[direct].name); filter->aslist[direct].name = NULL; filter->aslist[direct].aslist = NULL; @@ -5151,7 +5165,7 @@ peer_aslist_unset (struct peer *peer,afi_t afi, safi_t safi, int direct) continue; if (filter->aslist[direct].name) - free (filter->aslist[direct].name); + XFREE(MTYPE_BGP_FILTER_NAME, filter->aslist[direct].name); filter->aslist[direct].name = NULL; filter->aslist[direct].aslist = NULL; peer_on_policy_change(peer, afi, safi, @@ -5253,9 +5267,9 @@ peer_route_map_set (struct peer *peer, afi_t afi, safi_t safi, int direct, filter = &peer->filter[afi][safi]; if (filter->map[direct].name) - free (filter->map[direct].name); + XFREE(MTYPE_BGP_FILTER_NAME, filter->map[direct].name); - filter->map[direct].name = strdup (name); + filter->map[direct].name = XSTRDUP(MTYPE_BGP_FILTER_NAME, name); filter->map[direct].map = route_map_lookup_by_name (name); if (! CHECK_FLAG (peer->sflags, PEER_STATUS_GROUP)) @@ -5274,8 +5288,8 @@ peer_route_map_set (struct peer *peer, afi_t afi, safi_t safi, int direct, continue; if (filter->map[direct].name) - free (filter->map[direct].name); - filter->map[direct].name = strdup (name); + XFREE(MTYPE_BGP_FILTER_NAME, filter->map[direct].name); + filter->map[direct].name = XSTRDUP(MTYPE_BGP_FILTER_NAME, name); filter->map[direct].map = route_map_lookup_by_name (name); peer_on_policy_change(peer, afi, safi, (direct == RMAP_OUT) ? 1 : 0); @@ -5313,8 +5327,8 @@ peer_route_map_unset (struct peer *peer, afi_t afi, safi_t safi, int direct) if (gfilter->map[direct].name) { if (filter->map[direct].name) - free (filter->map[direct].name); - filter->map[direct].name = strdup (gfilter->map[direct].name); + XFREE(MTYPE_BGP_FILTER_NAME, filter->map[direct].name); + filter->map[direct].name = XSTRDUP(MTYPE_BGP_FILTER_NAME, gfilter->map[direct].name); filter->map[direct].map = gfilter->map[direct].map; peer_on_policy_change(peer, afi, safi, (direct == RMAP_OUT) ? 1 : 0); @@ -5323,7 +5337,7 @@ peer_route_map_unset (struct peer *peer, afi_t afi, safi_t safi, int direct) } if (filter->map[direct].name) - free (filter->map[direct].name); + XFREE(MTYPE_BGP_FILTER_NAME, filter->map[direct].name); filter->map[direct].name = NULL; filter->map[direct].map = NULL; @@ -5343,7 +5357,7 @@ peer_route_map_unset (struct peer *peer, afi_t afi, safi_t safi, int direct) continue; if (filter->map[direct].name) - free (filter->map[direct].name); + XFREE(MTYPE_BGP_FILTER_NAME, filter->map[direct].name); filter->map[direct].name = NULL; filter->map[direct].map = NULL; peer_on_policy_change(peer, afi, safi, @@ -5370,9 +5384,9 @@ peer_unsuppress_map_set (struct peer *peer, afi_t afi, safi_t safi, filter = &peer->filter[afi][safi]; if (filter->usmap.name) - free (filter->usmap.name); + XFREE(MTYPE_BGP_FILTER_NAME, filter->usmap.name); - filter->usmap.name = strdup (name); + filter->usmap.name = XSTRDUP(MTYPE_BGP_FILTER_NAME, name); filter->usmap.map = route_map_lookup_by_name (name); if (! CHECK_FLAG (peer->sflags, PEER_STATUS_GROUP)) @@ -5390,8 +5404,8 @@ peer_unsuppress_map_set (struct peer *peer, afi_t afi, safi_t safi, continue; if (filter->usmap.name) - free (filter->usmap.name); - filter->usmap.name = strdup (name); + XFREE(MTYPE_BGP_FILTER_NAME, filter->usmap.name); + filter->usmap.name = XSTRDUP(MTYPE_BGP_FILTER_NAME, name); filter->usmap.map = route_map_lookup_by_name (name); peer_on_policy_change(peer, afi, safi, 1); } @@ -5415,7 +5429,7 @@ peer_unsuppress_map_unset (struct peer *peer, afi_t afi, safi_t safi) filter = &peer->filter[afi][safi]; if (filter->usmap.name) - free (filter->usmap.name); + XFREE(MTYPE_BGP_FILTER_NAME, filter->usmap.name); filter->usmap.name = NULL; filter->usmap.map = NULL; @@ -5434,7 +5448,7 @@ peer_unsuppress_map_unset (struct peer *peer, afi_t afi, safi_t safi) continue; if (filter->usmap.name) - free (filter->usmap.name); + XFREE(MTYPE_BGP_FILTER_NAME, filter->usmap.name); filter->usmap.name = NULL; filter->usmap.map = NULL; peer_on_policy_change(peer, afi, safi, 1); diff --git a/lib/agentx.c b/lib/agentx.c index be6b4320e4..bb95903adf 100644 --- a/lib/agentx.c +++ b/lib/agentx.c @@ -43,7 +43,7 @@ agentx_log_callback(int major, int minor, void *serverarg, void *clientarg) { struct snmp_log_message *slm = (struct snmp_log_message *)serverarg; - char *msg = strdup (slm->msg); + char *msg = XSTRDUP(MTYPE_TMP, slm->msg); if (msg) msg[strlen(msg)-1] = '\0'; switch (slm->priority) { @@ -56,7 +56,7 @@ agentx_log_callback(int major, int minor, case LOG_INFO: zlog_info ("snmp[info]: %s", msg?msg:slm->msg); break; case LOG_DEBUG: zlog_debug ("snmp[debug]: %s", msg?msg:slm->msg); break; } - free(msg); + XFREE(MTYPE_TMP, msg); return SNMP_ERR_NOERROR; } diff --git a/lib/distribute.c b/lib/distribute.c index 7157d9a5be..525177e17b 100644 --- a/lib/distribute.c +++ b/lib/distribute.c @@ -49,14 +49,14 @@ distribute_free (struct distribute *dist) XFREE (MTYPE_DISTRIBUTE_IFNAME, dist->ifname); if (dist->list[DISTRIBUTE_IN]) - free (dist->list[DISTRIBUTE_IN]); + XFREE(MTYPE_DISTRIBUTE_NAME, dist->list[DISTRIBUTE_IN]); if (dist->list[DISTRIBUTE_OUT]) - free (dist->list[DISTRIBUTE_OUT]); + XFREE(MTYPE_DISTRIBUTE_NAME, dist->list[DISTRIBUTE_OUT]); if (dist->prefix[DISTRIBUTE_IN]) - free (dist->prefix[DISTRIBUTE_IN]); + XFREE(MTYPE_DISTRIBUTE_NAME, dist->prefix[DISTRIBUTE_IN]); if (dist->prefix[DISTRIBUTE_OUT]) - free (dist->prefix[DISTRIBUTE_OUT]); + XFREE(MTYPE_DISTRIBUTE_NAME, dist->prefix[DISTRIBUTE_OUT]); XFREE (MTYPE_DISTRIBUTE, dist); } @@ -151,14 +151,14 @@ distribute_list_set (const char *ifname, enum distribute_type type, if (type == DISTRIBUTE_IN) { if (dist->list[DISTRIBUTE_IN]) - free (dist->list[DISTRIBUTE_IN]); - dist->list[DISTRIBUTE_IN] = strdup (alist_name); + XFREE(MTYPE_DISTRIBUTE_NAME, dist->list[DISTRIBUTE_IN]); + dist->list[DISTRIBUTE_IN] = XSTRDUP(MTYPE_DISTRIBUTE_NAME, alist_name); } if (type == DISTRIBUTE_OUT) { if (dist->list[DISTRIBUTE_OUT]) - free (dist->list[DISTRIBUTE_OUT]); - dist->list[DISTRIBUTE_OUT] = strdup (alist_name); + XFREE(MTYPE_DISTRIBUTE_NAME, dist->list[DISTRIBUTE_OUT]); + dist->list[DISTRIBUTE_OUT] = XSTRDUP(MTYPE_DISTRIBUTE_NAME, alist_name); } /* Apply this distribute-list to the interface. */ @@ -186,7 +186,7 @@ distribute_list_unset (const char *ifname, enum distribute_type type, if (strcmp (dist->list[DISTRIBUTE_IN], alist_name) != 0) return 0; - free (dist->list[DISTRIBUTE_IN]); + XFREE(MTYPE_DISTRIBUTE_NAME, dist->list[DISTRIBUTE_IN]); dist->list[DISTRIBUTE_IN] = NULL; } @@ -197,7 +197,7 @@ distribute_list_unset (const char *ifname, enum distribute_type type, if (strcmp (dist->list[DISTRIBUTE_OUT], alist_name) != 0) return 0; - free (dist->list[DISTRIBUTE_OUT]); + XFREE(MTYPE_DISTRIBUTE_NAME, dist->list[DISTRIBUTE_OUT]); dist->list[DISTRIBUTE_OUT] = NULL; } @@ -229,14 +229,14 @@ distribute_list_prefix_set (const char *ifname, enum distribute_type type, if (type == DISTRIBUTE_IN) { if (dist->prefix[DISTRIBUTE_IN]) - free (dist->prefix[DISTRIBUTE_IN]); - dist->prefix[DISTRIBUTE_IN] = strdup (plist_name); + XFREE(MTYPE_DISTRIBUTE_NAME, dist->prefix[DISTRIBUTE_IN]); + dist->prefix[DISTRIBUTE_IN] = XSTRDUP(MTYPE_DISTRIBUTE_NAME, plist_name); } if (type == DISTRIBUTE_OUT) { if (dist->prefix[DISTRIBUTE_OUT]) - free (dist->prefix[DISTRIBUTE_OUT]); - dist->prefix[DISTRIBUTE_OUT] = strdup (plist_name); + XFREE(MTYPE_DISTRIBUTE_NAME, dist->prefix[DISTRIBUTE_OUT]); + dist->prefix[DISTRIBUTE_OUT] = XSTRDUP(MTYPE_DISTRIBUTE_NAME, plist_name); } /* Apply this distribute-list to the interface. */ @@ -264,8 +264,8 @@ distribute_list_prefix_unset (const char *ifname, enum distribute_type type, if (strcmp (dist->prefix[DISTRIBUTE_IN], plist_name) != 0) return 0; - free (dist->prefix[DISTRIBUTE_IN]); - dist->prefix[DISTRIBUTE_IN] = NULL; + XFREE(MTYPE_DISTRIBUTE_NAME, dist->prefix[DISTRIBUTE_IN]); + dist->prefix[DISTRIBUTE_IN] = NULL; } if (type == DISTRIBUTE_OUT) @@ -275,8 +275,8 @@ distribute_list_prefix_unset (const char *ifname, enum distribute_type type, if (strcmp (dist->prefix[DISTRIBUTE_OUT], plist_name) != 0) return 0; - free (dist->prefix[DISTRIBUTE_OUT]); - dist->prefix[DISTRIBUTE_OUT] = NULL; + XFREE(MTYPE_DISTRIBUTE_NAME, dist->prefix[DISTRIBUTE_OUT]); + dist->prefix[DISTRIBUTE_OUT] = NULL; } /* Apply this distribute-list to the interface. */ diff --git a/lib/keychain.c b/lib/keychain.c index 762c46298a..ac2627ee09 100644 --- a/lib/keychain.c +++ b/lib/keychain.c @@ -101,7 +101,7 @@ keychain_get (const char *name) return keychain; keychain = keychain_new (); - keychain->name = strdup (name); + keychain->name = XSTRDUP(MTYPE_KEYCHAIN, name); keychain->key = list_new (); keychain->key->cmp = (int (*)(void *, void *)) key_cmp_func; keychain->key->del = (void (*)(void *)) key_delete_func; @@ -114,7 +114,7 @@ static void keychain_delete (struct keychain *keychain) { if (keychain->name) - free (keychain->name); + XFREE(MTYPE_KEYCHAIN, keychain->name); list_delete (keychain->key); listnode_delete (keychain_list, keychain); @@ -223,7 +223,7 @@ key_delete (struct keychain *keychain, struct key *key) listnode_delete (keychain->key, key); if (key->string) - free (key->string); + XFREE(MTYPE_KEY, key->string); key_free (key); } @@ -325,8 +325,8 @@ DEFUN (key_string, key = vty->index_sub; if (key->string) - free (key->string); - key->string = strdup (argv[0]); + XFREE(MTYPE_KEY, key->string); + key->string = XSTRDUP(MTYPE_KEY, argv[0]); return CMD_SUCCESS; } @@ -344,7 +344,7 @@ DEFUN (no_key_string, if (key->string) { - free (key->string); + XFREE(MTYPE_KEY, key->string); key->string = NULL; } diff --git a/lib/log.c b/lib/log.c index a4ab9fdead..64bd164587 100644 --- a/lib/log.c +++ b/lib/log.c @@ -640,7 +640,7 @@ closezlog (struct zlog *zl) fclose (zl->fp); if (zl->filename != NULL) - free (zl->filename); + XFREE(MTYPE_ZLOG, zl->filename); XFREE (MTYPE_ZLOG, zl); } @@ -676,7 +676,7 @@ zlog_set_file (struct zlog *zl, const char *filename, int log_level) return 0; /* Set flags. */ - zl->filename = strdup (filename); + zl->filename = XSTRDUP(MTYPE_ZLOG, filename); zl->maxlvl[ZLOG_DEST_FILE] = log_level; zl->fp = fp; logfile_fd = fileno(fp); @@ -698,7 +698,7 @@ zlog_reset_file (struct zlog *zl) zl->maxlvl[ZLOG_DEST_FILE] = ZLOG_DISABLED; if (zl->filename) - free (zl->filename); + XFREE(MTYPE_ZLOG, zl->filename); zl->filename = NULL; return 1; diff --git a/lib/memtypes.c b/lib/memtypes.c index f0f11c2ca7..5b0c12040a 100644 --- a/lib/memtypes.c +++ b/lib/memtypes.c @@ -43,6 +43,7 @@ struct memory_list memory_list_lib[] = { MTYPE_ROUTE_NODE, "Route node" }, { MTYPE_DISTRIBUTE, "Distribute list" }, { MTYPE_DISTRIBUTE_IFNAME, "Dist-list ifname" }, + { MTYPE_DISTRIBUTE_NAME, "Dist-list name" }, { MTYPE_ACCESS_LIST, "Access List" }, { MTYPE_ACCESS_LIST_STR, "Access List Str" }, { MTYPE_ACCESS_FILTER, "Access Filter" }, @@ -97,7 +98,9 @@ struct memory_list memory_list_bgp[] = { MTYPE_BGP_LISTENER, "BGP listen socket details" }, { MTYPE_BGP_PEER, "BGP peer" }, { MTYPE_BGP_PEER_HOST, "BGP peer hostname" }, - { MTYPE_PEER_GROUP, "Peer group" }, + { MTYPE_BGP_PEER_IFNAME, "BGP peer ifname" }, + { MTYPE_BGP_PEER_GROUP, "BGP Peer group" }, + { MTYPE_BGP_PEER_GROUP_HOST, "BGP Peer group hostname" }, { MTYPE_PEER_DESC, "Peer description" }, { MTYPE_PEER_PASSWORD, "Peer password string" }, { MTYPE_BGP_PEER_AF, "BGP peer af" }, @@ -152,6 +155,7 @@ struct memory_list memory_list_bgp[] = { MTYPE_TRANSIT_VAL, "BGP transit val" }, { 0, NULL }, { MTYPE_BGP_DEBUG_FILTER, "BGP debug filter" }, + { MTYPE_BGP_DEBUG_STR, "BGP debug filter string" }, { 0, NULL }, { MTYPE_BGP_DISTANCE, "BGP distance" }, { MTYPE_BGP_NEXTHOP_CACHE, "BGP nexthop" }, @@ -163,6 +167,10 @@ struct memory_list memory_list_bgp[] = { MTYPE_BGP_REGEXP, "BGP regexp" }, { MTYPE_BGP_AGGREGATE, "BGP aggregate" }, { MTYPE_BGP_ADDR, "BGP own address" }, + { 0 , NULL}, + { MTYPE_BGP_REDIST, "BGP redistribution" }, + { MTYPE_BGP_FILTER_NAME, "BGP Filter Information" }, + { MTYPE_BGP_DUMP_STR, "BGP Dump String Information" }, { -1, NULL } }; -- 2.39.5