Sophie

Sophie

distrib > Scientific%20Linux > 5x > x86_64 > by-pkgid > 20db51d70e6b59a061db97ce9b89c771 > files > 63

net-snmp-5.3.2.2-14.el5.src.rpm

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);