From 94ff78a7e3448a366288b14b674da8482f36afca Mon Sep 17 00:00:00 2001 From: Donatas Abraitis Date: Tue, 5 Apr 2022 11:02:07 +0300 Subject: [PATCH 1/2] bgpd: Track RTRLib memory allocations separately With fast `rpki reset`, seems that RTRLib related memory allocations leak the memory. Need to figure this out later. ``` $ vtysh -c 'show memory | include RPKI' BGP RPKI Cache server : 12 variable 576 12 576 BGP RPKI Cache server group : 0 48 0 1 56 BGP RPKI RTRLib : 849657 variable 34453096 849662 41293504 $ for x in $(seq 1 60); do vtysh -c 'con' -c 'rpki' -c 'rpki reset'; sleep 1; done $ vtysh -c 'show memory | include RPKI' BGP RPKI Cache server : 12 variable 576 12 576 BGP RPKI Cache server group : 0 48 0 1 56 BGP RPKI RTRLib : 849699 variable 69490616 849701 76323832 ``` Signed-off-by: Donatas Abraitis --- bgpd/bgp_rpki.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/bgpd/bgp_rpki.c b/bgpd/bgp_rpki.c index c724b938d1..cbccc4423f 100644 --- a/bgpd/bgp_rpki.c +++ b/bgpd/bgp_rpki.c @@ -67,6 +67,7 @@ static struct thread *t_rpki; DEFINE_MTYPE_STATIC(BGPD, BGP_RPKI_CACHE, "BGP RPKI Cache server"); DEFINE_MTYPE_STATIC(BGPD, BGP_RPKI_CACHE_GROUP, "BGP RPKI Cache server group"); +DEFINE_MTYPE_STATIC(BGPD, BGP_RPKI_RTRLIB, "BGP RPKI RTRLib"); #define POLLING_PERIOD_DEFAULT 3600 #define EXPIRE_INTERVAL_DEFAULT 7200 @@ -156,17 +157,17 @@ static const struct route_map_rule_cmd route_match_rpki_cmd = { static void *malloc_wrapper(size_t size) { - return XMALLOC(MTYPE_BGP_RPKI_CACHE, size); + return XMALLOC(MTYPE_BGP_RPKI_RTRLIB, size); } static void *realloc_wrapper(void *ptr, size_t size) { - return XREALLOC(MTYPE_BGP_RPKI_CACHE, ptr, size); + return XREALLOC(MTYPE_BGP_RPKI_RTRLIB, ptr, size); } static void free_wrapper(void *ptr) { - XFREE(MTYPE_BGP_RPKI_CACHE, ptr); + XFREE(MTYPE_BGP_RPKI_RTRLIB, ptr); } static void init_tr_socket(struct cache *cache) From c41a3cc5289f23d2aa70b5a9d8ddb7ebe408c54f Mon Sep 17 00:00:00 2001 From: Donatas Abraitis Date: Tue, 5 Apr 2022 11:12:22 +0300 Subject: [PATCH 2/2] bgpd: No need to check for NULL before calling XFREE() in RPKI code Signed-off-by: Donatas Abraitis --- bgpd/bgp_rpki.c | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/bgpd/bgp_rpki.c b/bgpd/bgp_rpki.c index cbccc4423f..a7bc89e648 100644 --- a/bgpd/bgp_rpki.c +++ b/bgpd/bgp_rpki.c @@ -903,9 +903,8 @@ static void free_cache(struct cache *cache) if (cache->type == TCP) { XFREE(MTYPE_BGP_RPKI_CACHE, cache->tr_config.tcp_config->host); XFREE(MTYPE_BGP_RPKI_CACHE, cache->tr_config.tcp_config->port); - if (cache->tr_config.tcp_config->bindaddr) - XFREE(MTYPE_BGP_RPKI_CACHE, - cache->tr_config.tcp_config->bindaddr); + XFREE(MTYPE_BGP_RPKI_CACHE, + cache->tr_config.tcp_config->bindaddr); XFREE(MTYPE_BGP_RPKI_CACHE, cache->tr_config.tcp_config); } #if defined(FOUND_SSH) @@ -917,9 +916,8 @@ static void free_cache(struct cache *cache) cache->tr_config.ssh_config->client_privkey_path); XFREE(MTYPE_BGP_RPKI_CACHE, cache->tr_config.ssh_config->server_hostkey_path); - if (cache->tr_config.ssh_config->bindaddr) - XFREE(MTYPE_BGP_RPKI_CACHE, - cache->tr_config.ssh_config->bindaddr); + XFREE(MTYPE_BGP_RPKI_CACHE, + cache->tr_config.ssh_config->bindaddr); XFREE(MTYPE_BGP_RPKI_CACHE, cache->tr_config.ssh_config); } #endif