518633 - snmpd leaks memory Fix leaks in ipAddressPrefixTable_container_load, ipv6ScopeZoneIndexTable_container_load, udpEndpointTable_container_load, ipDefaultRouterTable_container_load, ipIfStatsTable_container_load, udpEndpointTable_container_load and tcpListenerTable_container_load SVN revs. 17719, 17722, 17734 diff --git a/net-snmp/agent/mibgroup/tcp-mib/tcpConnectionTable/tcpConnectionTable_data_access.c b/net-snmp/agent/mibgroup/tcp-mib/tcpConnectionTable/tcpConnectionTable_data_access.c index fec6bef..807dd9d 100644 --- a/net-snmp/agent/mibgroup/tcp-mib/tcpConnectionTable/tcpConnectionTable_data_access.c +++ b/net-snmp/agent/mibgroup/tcp-mib/tcpConnectionTable/tcpConnectionTable_data_access.c @@ -256,8 +256,7 @@ tcpConnectionTable_container_load(netsnmp_container *container) * free the container. we've either claimed each entry, or released it, * so the dal function doesn't need to clear the container. */ - netsnmp_access_tcpconn_container_free(raw_data, - NETSNMP_ACCESS_TCPCONN_FREE_DONT_CLEAR); + netsnmp_access_tcpconn_container_free(raw_data, 0); DEBUGMSGT(("verbose:tcpConnectionTable:tcpConnectionTable_cache_load", "%d records\n", (int)CONTAINER_SIZE(container))); diff --git a/net-snmp/agent/mibgroup/tcp-mib/tcpListenerTable/tcpListenerTable_data_access.c b/net-snmp/agent/mibgroup/tcp-mib/tcpListenerTable/tcpListenerTable_data_access.c index b25d5db..09ba655 100644 --- a/net-snmp/agent/mibgroup/tcp-mib/tcpListenerTable/tcpListenerTable_data_access.c +++ b/net-snmp/agent/mibgroup/tcp-mib/tcpListenerTable/tcpListenerTable_data_access.c @@ -254,8 +254,7 @@ tcpListenerTable_container_load(netsnmp_container *container) * free the container. we've either claimed each entry, or released it, * so the dal function doesn't need to clear the container. */ - netsnmp_access_tcpconn_container_free(raw_data, - NETSNMP_ACCESS_TCPCONN_FREE_DONT_CLEAR); + netsnmp_access_tcpconn_container_free(raw_data, 0); DEBUGMSGT(("verbose:tcpListenerTable:tcpListenerTable_cache_load", "%d records\n", (int)CONTAINER_SIZE(container))); diff --git a/net-snmp/agent/mibgroup/udp-mib/udpEndpointTable/udpEndpointTable_data_access.c b/net-snmp/agent/mibgroup/udp-mib/udpEndpointTable/udpEndpointTable_data_access.c index f3ce6f5..c3d62b7 100644 --- a/net-snmp/agent/mibgroup/udp-mib/udpEndpointTable/udpEndpointTable_data_access.c +++ b/net-snmp/agent/mibgroup/udp-mib/udpEndpointTable/udpEndpointTable_data_access.c @@ -290,8 +290,7 @@ udpEndpointTable_container_load(netsnmp_container *container) ITERATOR_RELEASE(ep_it); - netsnmp_access_udp_endpoint_container_free(ep_c, - NETSNMP_ACCESS_UDP_ENDPOINT_FREE_DONT_CLEAR); + netsnmp_access_udp_endpoint_container_free(ep_c, 0); DEBUGMSGT(("verbose:udpEndpointTable:udpEndpointTable_container_load", diff --git a/net-snmp/agent/mibgroup/ip-mib/ipAddressPrefixTable/ipAddressPrefixTable_data_access.c b/net-snmp/agent/mibgroup/ip-mib/ipAddressPrefixTable/ipAddressPrefixTable_data_access.c index 7fc0a60..ec4e579 100644 --- a/net-snmp/agent/mibgroup/ip-mib/ipAddressPrefixTable/ipAddressPrefixTable_data_access.c +++ b/net-snmp/agent/mibgroup/ip-mib/ipAddressPrefixTable/ipAddressPrefixTable_data_access.c @@ -312,6 +312,7 @@ ipAddressPrefixTable_container_load(netsnmp_container *container) rowreq_ctx = NULL; ++count; } + ITERATOR_RELEASE(addr_it); DEBUGMSGT(("verbose:ipAddressPrefixTable:ipAddressPrefixTable_container_load", "inserted %d records\n", count)); diff --git a/net-snmp/agent/mibgroup/ip-mib/ipDefaultRouterTable/ipDefaultRouterTable.c b/net-snmp/agent/mibgroup/ip-mib/ipDefaultRouterTable/ipDefaultRouterTable.c index f9aca75..09a000c 100644 --- a/net-snmp/agent/mibgroup/ip-mib/ipDefaultRouterTable/ipDefaultRouterTable.c +++ b/net-snmp/agent/mibgroup/ip-mib/ipDefaultRouterTable/ipDefaultRouterTable.c @@ -160,6 +160,8 @@ ipDefaultRouterTable_rowreq_ctx_cleanup(ipDefaultRouterTable_rowreq_ctx * /* * TODO:211:o: |-> Perform extra ipDefaultRouterTable rowreq cleanup. */ + netsnmp_access_defaultrouter_entry_free(rowreq_ctx->data); + rowreq_ctx->data = NULL; } /* ipDefaultRouterTable_rowreq_ctx_cleanup */ /** diff --git a/net-snmp/agent/mibgroup/ip-mib/ipIfStatsTable/ipIfStatsTable.c b/net-snmp/agent/mibgroup/ip-mib/ipIfStatsTable/ipIfStatsTable.c index 074a3c7..065c730 100644 --- a/net-snmp/agent/mibgroup/ip-mib/ipIfStatsTable/ipIfStatsTable.c +++ b/net-snmp/agent/mibgroup/ip-mib/ipIfStatsTable/ipIfStatsTable.c @@ -162,6 +162,8 @@ ipIfStatsTable_rowreq_ctx_cleanup(ipIfStatsTable_rowreq_ctx * rowreq_ctx) /* * TODO:211:o: |-> Perform extra ipIfStatsTable rowreq cleanup. */ + netsnmp_access_systemstats_entry_free(rowreq_ctx->data); + rowreq_ctx->data = NULL; } /* ipIfStatsTable_rowreq_ctx_cleanup */ /** diff --git a/net-snmp/agent/mibgroup/ip-mib/ipSystemStatsTable/ipSystemStatsTable.c b/net-snmp/agent/mibgroup/ip-mib/ipSystemStatsTable/ipSystemStatsTable.c index 32c666c..b7bad27 100644 --- a/net-snmp/agent/mibgroup/ip-mib/ipSystemStatsTable/ipSystemStatsTable.c +++ b/net-snmp/agent/mibgroup/ip-mib/ipSystemStatsTable/ipSystemStatsTable.c @@ -160,6 +160,8 @@ ipSystemStatsTable_rowreq_ctx_cleanup(ipSystemStatsTable_rowreq_ctx * /* * TODO:211:o: |-> Perform extra ipSystemStatsTable rowreq cleanup. */ + netsnmp_access_systemstats_entry_free(rowreq_ctx->data); + rowreq_ctx->data = NULL; } /* ipSystemStatsTable_rowreq_ctx_cleanup */ /** diff --git a/net-snmp/agent/mibgroup/ip-mib/ipv6ScopeZoneIndexTable/ipv6ScopeZoneIndexTable.c b/net-snmp/agent/mibgroup/ip-mib/ipv6ScopeZoneIndexTable/ipv6ScopeZoneIndexTable.c index 28ea0c4..eec2a4e 100644 --- a/net-snmp/agent/mibgroup/ip-mib/ipv6ScopeZoneIndexTable/ipv6ScopeZoneIndexTable.c +++ b/net-snmp/agent/mibgroup/ip-mib/ipv6ScopeZoneIndexTable/ipv6ScopeZoneIndexTable.c @@ -159,6 +159,8 @@ ipv6ScopeZoneIndexTable_rowreq_ctx_cleanup /* * TODO:211:o: |-> Perform extra ipv6ScopeZoneIndexTable rowreq cleanup. */ + netsnmp_access_scopezone_entry_free(rowreq_ctx->data); + rowreq_ctx->data = NULL; } /* ipv6ScopeZoneIndexTable_rowreq_ctx_cleanup */ /** diff -up net-snmp-5.3.2.2/agent/mibgroup/udp-mib/data_access/udp_endpoint_linux.c.old net-snmp-5.3.2.2/agent/mibgroup/udp-mib/data_access/udp_endpoint_linux.c --- a/net-snmp-5.3.2.2/agent/mibgroup/udp-mib/data_access/udp_endpoint_linux.c.old 2009-08-21 16:52:26.000000000 +0200 +++ b/net-snmp-5.3.2.2/agent/mibgroup/udp-mib/data_access/udp_endpoint_linux.c 2009-08-21 16:52:05.000000000 +0200 @@ -270,6 +270,8 @@ _load4(netsnmp_container *container, u_i container = netsnmp_file_text_parse(fp, container, PM_USER_FUNCTION, 0, &lpi); + netsnmp_file_release(fp); + free(fp); return (NULL == container); } @@ -303,6 +305,8 @@ _load6(netsnmp_container *container, u_i container = netsnmp_file_text_parse(fp, container, PM_USER_FUNCTION, 0, &lpi); + netsnmp_file_release(fp); + free(fp); return (NULL == container); } #endif /* INET6 */