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 and 17861, 17795, 18005. diff -up net-snmp-5.3.2.2/agent/mibgroup/ip-mib/ipAddressPrefixTable/ipAddressPrefixTable_data_access.c.leaks net-snmp-5.3.2.2/agent/mibgroup/ip-mib/ipAddressPrefixTable/ipAddressPrefixTable_data_access.c --- net-snmp-5.3.2.2/agent/mibgroup/ip-mib/ipAddressPrefixTable/ipAddressPrefixTable_data_access.c.leaks 2009-12-02 15:56:06.000000000 +0100 +++ net-snmp-5.3.2.2/agent/mibgroup/ip-mib/ipAddressPrefixTable/ipAddressPrefixTable_data_access.c 2009-12-02 15:56:06.000000000 +0100 @@ -312,6 +312,7 @@ ipAddressPrefixTable_container_load(nets rowreq_ctx = NULL; ++count; } + ITERATOR_RELEASE(addr_it); DEBUGMSGT(("verbose:ipAddressPrefixTable:ipAddressPrefixTable_container_load", "inserted %d records\n", count)); diff -up net-snmp-5.3.2.2/agent/mibgroup/ip-mib/ipDefaultRouterTable/ipDefaultRouterTable.c.leaks net-snmp-5.3.2.2/agent/mibgroup/ip-mib/ipDefaultRouterTable/ipDefaultRouterTable.c --- net-snmp-5.3.2.2/agent/mibgroup/ip-mib/ipDefaultRouterTable/ipDefaultRouterTable.c.leaks 2009-12-02 15:56:06.000000000 +0100 +++ net-snmp-5.3.2.2/agent/mibgroup/ip-mib/ipDefaultRouterTable/ipDefaultRouterTable.c 2009-12-02 15:56:06.000000000 +0100 @@ -160,6 +160,8 @@ ipDefaultRouterTable_rowreq_ctx_cleanup( /* * 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 -up net-snmp-5.3.2.2/agent/mibgroup/ip-mib/ipIfStatsTable/ipIfStatsTable.c.leaks net-snmp-5.3.2.2/agent/mibgroup/ip-mib/ipIfStatsTable/ipIfStatsTable.c --- net-snmp-5.3.2.2/agent/mibgroup/ip-mib/ipIfStatsTable/ipIfStatsTable.c.leaks 2009-12-02 15:56:06.000000000 +0100 +++ net-snmp-5.3.2.2/agent/mibgroup/ip-mib/ipIfStatsTable/ipIfStatsTable.c 2009-12-02 15:56:06.000000000 +0100 @@ -162,6 +162,8 @@ ipIfStatsTable_rowreq_ctx_cleanup(ipIfSt /* * 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 -up net-snmp-5.3.2.2/agent/mibgroup/ip-mib/ipSystemStatsTable/ipSystemStatsTable.c.leaks net-snmp-5.3.2.2/agent/mibgroup/ip-mib/ipSystemStatsTable/ipSystemStatsTable.c --- net-snmp-5.3.2.2/agent/mibgroup/ip-mib/ipSystemStatsTable/ipSystemStatsTable.c.leaks 2009-12-02 15:56:06.000000000 +0100 +++ net-snmp-5.3.2.2/agent/mibgroup/ip-mib/ipSystemStatsTable/ipSystemStatsTable.c 2009-12-02 15:56:06.000000000 +0100 @@ -160,6 +160,8 @@ ipSystemStatsTable_rowreq_ctx_cleanup(ip /* * 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 -up net-snmp-5.3.2.2/agent/mibgroup/ip-mib/ipv6ScopeZoneIndexTable/ipv6ScopeZoneIndexTable.c.leaks net-snmp-5.3.2.2/agent/mibgroup/ip-mib/ipv6ScopeZoneIndexTable/ipv6ScopeZoneIndexTable.c --- net-snmp-5.3.2.2/agent/mibgroup/ip-mib/ipv6ScopeZoneIndexTable/ipv6ScopeZoneIndexTable.c.leaks 2009-12-02 15:56:06.000000000 +0100 +++ net-snmp-5.3.2.2/agent/mibgroup/ip-mib/ipv6ScopeZoneIndexTable/ipv6ScopeZoneIndexTable.c 2009-12-02 15:56:06.000000000 +0100 @@ -159,6 +159,8 @@ ipv6ScopeZoneIndexTable_rowreq_ctx_clean /* * 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/tcp-mib/tcpConnectionTable/tcpConnectionTable.c.leaks net-snmp-5.3.2.2/agent/mibgroup/tcp-mib/tcpConnectionTable/tcpConnectionTable.c --- net-snmp-5.3.2.2/agent/mibgroup/tcp-mib/tcpConnectionTable/tcpConnectionTable.c.leaks 2009-12-02 15:56:20.000000000 +0100 +++ net-snmp-5.3.2.2/agent/mibgroup/tcp-mib/tcpConnectionTable/tcpConnectionTable.c 2009-12-02 15:57:31.000000000 +0100 @@ -155,6 +155,8 @@ tcpConnectionTable_rowreq_ctx_cleanup(tc /* * TODO:211:o: |-> Perform extra tcpConnectionTable rowreq cleanup. */ + netsnmp_access_tcpconn_entry_free(rowreq_ctx->data); + rowreq_ctx->data = NULL; } /* tcpConnectionTable_rowreq_ctx_cleanup */ /** diff -up net-snmp-5.3.2.2/agent/mibgroup/tcp-mib/tcpListenerTable/tcpListenerTable.c.leaks net-snmp-5.3.2.2/agent/mibgroup/tcp-mib/tcpListenerTable/tcpListenerTable.c --- net-snmp-5.3.2.2/agent/mibgroup/tcp-mib/tcpListenerTable/tcpListenerTable.c.leaks 2009-12-02 15:56:26.000000000 +0100 +++ net-snmp-5.3.2.2/agent/mibgroup/tcp-mib/tcpListenerTable/tcpListenerTable.c 2009-12-02 15:57:23.000000000 +0100 @@ -154,6 +154,8 @@ tcpListenerTable_rowreq_ctx_cleanup(tcpL /* * TODO:211:o: |-> Perform extra tcpListenerTable rowreq cleanup. */ + netsnmp_access_tcpconn_entry_free(rowreq_ctx->data); + rowreq_ctx->data = NULL; } /* tcpListenerTable_rowreq_ctx_cleanup */ /** diff -up net-snmp-5.3.2.2/agent/mibgroup/udp-mib/data_access/udp_endpoint_linux.c.leaks net-snmp-5.3.2.2/agent/mibgroup/udp-mib/data_access/udp_endpoint_linux.c --- net-snmp-5.3.2.2/agent/mibgroup/udp-mib/data_access/udp_endpoint_linux.c.leaks 2009-12-02 15:56:06.000000000 +0100 +++ net-snmp-5.3.2.2/agent/mibgroup/udp-mib/data_access/udp_endpoint_linux.c 2009-12-02 15:56:06.000000000 +0100 @@ -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 */ diff -up net-snmp-5.3.2.2/agent/mibgroup/udp-mib/udpEndpointTable/udpEndpointTable_data_access.c.leaks net-snmp-5.3.2.2/agent/mibgroup/udp-mib/udpEndpointTable/udpEndpointTable_data_access.c --- net-snmp-5.3.2.2/agent/mibgroup/udp-mib/udpEndpointTable/udpEndpointTable_data_access.c.leaks 2009-12-02 15:56:06.000000000 +0100 +++ net-snmp-5.3.2.2/agent/mibgroup/udp-mib/udpEndpointTable/udpEndpointTable_data_access.c 2009-12-02 15:56:06.000000000 +0100 @@ -290,8 +290,7 @@ udpEndpointTable_container_load(netsnmp_ 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/snmplib/snmp_client.c b/net-snmp/snmplib/snmp_client.c index 36f52e2..1cc1d03 100644 --- net-snmp/snmplib/snmp_client.c +++ net-snmp/snmplib/snmp_client.c @@ -653,8 +653,7 @@ snmp_set_var_objid(netsnmp_variable_list * vp, { size_t len = sizeof(oid) * name_length; - if (vp->name != vp->name_loc && vp->name != NULL && - vp->name_length > (sizeof(vp->name_loc) / sizeof(oid))) { + if (vp->name != vp->name_loc && vp->name != NULL) { /* * Probably previously-allocated "big storage". Better free it * else memory leaks possible. diff -up net-snmp-5.3.2.2/agent/mibgroup/if-mib/data_access/interface_linux.c.leak net-snmp-5.3.2.2/agent/mibgroup/if-mib/data_access/interface_linux.c --- net-snmp-5.3.2.2/agent/mibgroup/if-mib/data_access/interface_linux.c.leak 2010-01-13 10:50:31.000000000 +0100 +++ net-snmp-5.3.2.2/agent/mibgroup/if-mib/data_access/interface_linux.c 2010-01-13 10:50:49.000000000 +0100 @@ -1041,7 +1041,7 @@ void *netsnmp_prefix_listen(netsnmp_pref if(!(new = net_snmp_create_prefix_info (onlink, autonomous, in6pAddr))) DEBUGMSGTL(("access:interface:prefix","Unable to create prefix info")); else { - iret = net_snmp_update_prefix_info (listen_info->list_head, new, listen_info->lockinfo); + iret = net_snmp_search_update_prefix_info (listen_info->list_head, new, 0, listen_info->lockinfo); if(iret < 0) { DEBUGMSGTL(("access:interface:prefix","Unable to add/update prefix info")); free(new);