Memory leak in list of sessions.

Alexander Ruzin <[email protected]>
Newsgroups gmane.network.net-snmp.devel
Message-ID <[email protected]>
Hi,


It seems, that there is a memory leak when reconfiguration by SIGHUP signal.

To reproduce and debug the issue I propose the following patch:

diff -rBbNuw -X ../Exclude net-snmp-5.8.org/agent/agent_read_config.c net-snmp-5.8/agent/agent_read_config.c
--- net-snmp-5.8.org/agent/agent_read_config.c 2018-07-16 17:33:40.000000000 +0300
+++ net-snmp-5.8/agent/agent_read_config.c 2019-07-02 10:51:34.219251554 +0300
@@ -304,10 +304,12 @@
 void
 update_config(void)
 {
+    snmp_dump_session_list (__func__, __LINE__);
     snmp_call_callbacks(SNMP_CALLBACK_APPLICATION,
                         SNMPD_CALLBACK_PRE_UPDATE_CONFIG, NULL);
     free_config();
     read_configs();
+    snmp_dump_session_list (__func__, __LINE__);
 }


diff -rBbNuw -X ../Exclude net-snmp-5.8.org/include/net-snmp/session_api.h net-snmp-5.8/include/net-snmp/session_api.h
--- net-snmp-5.8.org/include/net-snmp/session_api.h 2018-07-16 17:33:40.000000000 +0300
+++ net-snmp-5.8/include/net-snmp/session_api.h 2019-07-02 10:51:44.091262681 +0300
@@ -28,6 +28,10 @@
     NETSNMP_IMPORT
     void            snmp_sess_init(netsnmp_session *);

+
+
+    int snmp_dump_session_list (const char * func, int line); /* for debug */
+
     /*
      * netsnmp_session *snmp_open(session)
      *      netsnmp_session *session;
diff -rBbNuw -X ../Exclude net-snmp-5.8.org/snmplib/snmp_api.c net-snmp-5.8/snmplib/snmp_api.c
--- net-snmp-5.8.org/snmplib/snmp_api.c 2018-07-16 17:33:40.000000000 +0300
+++ net-snmp-5.8/snmplib/snmp_api.c 2019-07-02 10:50:54.551213214 +0300
@@ -990,6 +990,20 @@
     _init_snmp_init_done = 0;
 }

+int snmp_dump_session_list (const char * func, int line)
+{
+  int indx = 0;
+  struct session_list *slp = Sessions;
+
+  snmp_log(LOG_INFO, "%s(%d) %s Sessions=%p \n", func, line, __func__, Sessions);
+
+  for (slp = Sessions; slp; slp = slp->next) {
+    snmp_log(LOG_INFO, "  %d. slp=%p peer=<%s>\n", (int) ++indx, slp, slp->session->peername);
+  }
+  return indx;
+}
+
+
 /*
  * inserts session into session list
  */


If some of file snmpd.conf contains the line, for example, 'trapsess -v 2c     -c public 1.2.3.4" and the process snmpd receives SIGHUP, then in /var/log/snmpd.log we see:

...

Reconfiguring daemon

NET-SNMP version 5.8 restarted
update_config(307) snmp_dump_session_list Sessions=0x55aa58c82930
  1. slp=0x55aa58c82930 peer=<(null)>
  2. slp=0x55aa58c73790 peer=<1.2.3.4>
  3. slp=0x55aa58c6bab0 peer=<(null)>
  4. slp=0x55aa58b528d0 peer=<(null)>
update_config(312) snmp_dump_session_list Sessions=0x55aa58c83bf0
  1. slp=0x55aa58c83bf0 peer=<1.2.3.4>
  2. slp=0x55aa58c82930 peer=<(null)>
  3. slp=0x55aa58c73790 peer=<1.2.3.4>
  4. slp=0x55aa58c6bab0 peer=<(null)>
  5. slp=0x55aa58b528d0 peer=<(null)>

...



As a solution, I would suggest the following simple patch:

diff -rBbNuw -X ../Exclude net-snmp-5.8.org/agent/mibgroup/notification/snmpNotifyTable_data.c net-snmp-5.8/agent/mibgroup/notification/snmpNotifyTable_data.c
--- net-snmp-5.8.org/agent/mibgroup/notification/snmpNotifyTable_data.c 2018-07-16 17:33:40.000000000 +0300
+++ net-snmp-5.8/agent/mibgroup/notification/snmpNotifyTable_data.c 2019-07-03 08:17:05.953676342 +0300
@@ -511,6 +511,7 @@
         }
     }
     snmpNotifyTableStorage = NULL;
+    shutdown_snmpTargetAddrEntry_data(); // [email protected]
     return (0);
 }


Thank you, Alex

_______________________________________________
Net-snmp-coders mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/net-snmp-coders
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.