551030 - Memory corruption in TCP-MIB::tcpListenerProcess Source: upstream, SVN rev. 17861 CHANGES: snmpd: Fixed invalid access to memory in TCP-MIB diff --git a/agent/mibgroup/tcp-mib/tcpConnectionTable/tcpConnectionTable.c b/agent/mibgroup/tcp-mib/tcpConnectionTable/tcpConnectionTable.c index 7259bf8..e274d19 100644 --- a/agent/mibgroup/tcp-mib/tcpConnectionTable/tcpConnectionTable.c +++ b/agent/mibgroup/tcp-mib/tcpConnectionTable/tcpConnectionTable.c @@ -155,6 +155,8 @@ tcpConnectionTable_rowreq_ctx_cleanup(tcpConnectionTable_rowreq_ctx * /* * 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 --git a/agent/mibgroup/tcp-mib/tcpConnectionTable/tcpConnectionTable_data_access.c b/agent/mibgroup/tcp-mib/tcpConnectionTable/tcpConnectionTable_data_access.c index 807dd9d..fec6bef 100644 --- a/agent/mibgroup/tcp-mib/tcpConnectionTable/tcpConnectionTable_data_access.c +++ b/agent/mibgroup/tcp-mib/tcpConnectionTable/tcpConnectionTable_data_access.c @@ -256,7 +256,8 @@ 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, 0); + netsnmp_access_tcpconn_container_free(raw_data, + NETSNMP_ACCESS_TCPCONN_FREE_DONT_CLEAR); DEBUGMSGT(("verbose:tcpConnectionTable:tcpConnectionTable_cache_load", "%d records\n", (int)CONTAINER_SIZE(container))); diff --git a/agent/mibgroup/tcp-mib/tcpListenerTable/tcpListenerTable.c b/agent/mibgroup/tcp-mib/tcpListenerTable/tcpListenerTable.c index f3009dd..ebd672b 100644 --- a/agent/mibgroup/tcp-mib/tcpListenerTable/tcpListenerTable.c +++ b/agent/mibgroup/tcp-mib/tcpListenerTable/tcpListenerTable.c @@ -154,6 +154,8 @@ tcpListenerTable_rowreq_ctx_cleanup(tcpListenerTable_rowreq_ctx * /* * 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 --git a/agent/mibgroup/tcp-mib/tcpListenerTable/tcpListenerTable_data_access.c b/agent/mibgroup/tcp-mib/tcpListenerTable/tcpListenerTable_data_access.c index 09ba655..b25d5db 100644 --- a/agent/mibgroup/tcp-mib/tcpListenerTable/tcpListenerTable_data_access.c +++ b/agent/mibgroup/tcp-mib/tcpListenerTable/tcpListenerTable_data_access.c @@ -254,7 +254,8 @@ 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, 0); + netsnmp_access_tcpconn_container_free(raw_data, + NETSNMP_ACCESS_TCPCONN_FREE_DONT_CLEAR); DEBUGMSGT(("verbose:tcpListenerTable:tcpListenerTable_cache_load", "%d records\n", (int)CONTAINER_SIZE(container)));