[Pkg-net-snmp-commits] [pkg-net-snmp] 22/27: agentx-crash

Hideki Yamane henrich at moszumanska.debian.org
Sun Aug 28 02:19:49 UTC 2016


This is an automated email from the git hooks/post-receive script.

henrich pushed a commit to branch patch-queue/master
in repository pkg-net-snmp.

commit 583552747161d2c7c9bd184c72fe35b824476ed7
Author: Net-SNMP Packaging Team <pkg-net-snmp-devel at lists.alioth.debian.org>
Date:   Thu Jun 18 06:12:05 2015 +0900

    agentx-crash
    
    bz729738 - net-snmp dumps core in netsnmp_oid_find_prefix
    bz1038011 - net-snmp: snmpd crashes/hangs when AgentX subagent times-out
    
    commit f9304c83f76202db0e684269ca1af32e43cd9db4
    Author: Jan Safranek <jsafranek at users.sourceforge.net>
    Date:   Tue Feb 7 14:53:44 2012 +0100
    
        CHANGES: PATCH 1633670: fixed snmpd crashing when an AgentX subagent disconnect in the middle of processing of a request.
    
        I fixed also the memory leak reported in the tracker comments.
    
    
    Origin: vendor
    Forwarded: not-needed
    Last-Update: <YYYY-MM-DD>
    
    
    Gbp-Pq: Name agentx-crash.patch
---
 agent/mibgroup/agentx/master.c       | 5 +++++
 agent/mibgroup/agentx/master_admin.c | 9 +++++++--
 2 files changed, 12 insertions(+), 2 deletions(-)

diff --git a/agent/mibgroup/agentx/master.c b/agent/mibgroup/agentx/master.c
index c42a42a..baeebaf 100644
--- a/agent/mibgroup/agentx/master.c
+++ b/agent/mibgroup/agentx/master.c
@@ -219,6 +219,9 @@ agentx_got_response(int operation,
     if (!cache) {
         DEBUGMSGTL(("agentx/master", "response too late on session %8p\n",
                     session));
+        /* response is too late, free the cache */
+        if (magic)
+            netsnmp_free_delegated_cache((netsnmp_delegated_cache*) magic);
         return 0;
     }
     requests = cache->requests;
@@ -606,6 +609,8 @@ agentx_master_handler(netsnmp_mib_handler *handler,
     result = snmp_async_send(ax_session, pdu, agentx_got_response, cb_data);
     if (result == 0) {
         snmp_free_pdu(pdu);
+        if (cb_data)
+            netsnmp_free_delegated_cache((netsnmp_delegated_cache*) cb_data);
     }
 
     return SNMP_ERR_NOERROR;
diff --git a/agent/mibgroup/agentx/master_admin.c b/agent/mibgroup/agentx/master_admin.c
index 4eaeab6..4dc1aa7 100644
--- a/agent/mibgroup/agentx/master_admin.c
+++ b/agent/mibgroup/agentx/master_admin.c
@@ -133,11 +133,16 @@ close_agentx_session(netsnmp_session * session, int sessid)
          * requests, so that the delegated request will be completed and
          * further requests can be processed
          */
-        netsnmp_remove_delegated_requests_for_session(session);
+	while (netsnmp_remove_delegated_requests_for_session(session)) {
+		DEBUGMSGTL(("agentx/master", "Continue removing delegated reqests\n"));
+	}
+
         if (session->subsession != NULL) {
             netsnmp_session *subsession = session->subsession;
             for(; subsession; subsession = subsession->next) {
-                netsnmp_remove_delegated_requests_for_session(subsession);
+                while (netsnmp_remove_delegated_requests_for_session(subsession)) {
+			DEBUGMSGTL(("agentx/master", "Continue removing delegated subsession reqests\n"));
+		}
             }
         }
                 

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-net-snmp/pkg-net-snmp.git



More information about the Pkg-net-snmp-commits mailing list