Blame SOURCES/net-snmp-5.7.2-trigger-crash.patch

71d9c0
1050971 - snmpd segfault with entry->sysUpTime = *sysUT_var.val.integer
71d9c0
71d9c0
commit 9f4c572614091404decba0d4ef1a4cbaf9fc5bd2
71d9c0
Author: Jan Safranek <jsafranek@users.sourceforge.net>
71d9c0
Date:   Thu Jan 9 13:35:27 2014 +0100
71d9c0
71d9c0
    CHANGES: snmpd: Fixed monitoring based on non-delta trigger.
71d9c0
    
71d9c0
    snmpd crashed wit following snmpd.conf:
71d9c0
        monitor -s -D -r 10 -e LOGMATCH -o logMatchCurrentCount "Log Match" != logMatchCurrentCount
71d9c0
        logmatch LoginFailure1 /var/log/secure 10 su: .*fail.*
71d9c0
    
71d9c0
    The reason was unitialized variable sysUT_var in mteTrigger_run(), it was
71d9c0
    filled only if the trigger was delta-valued, while its value was used for all
71d9c0
    triggers.
71d9c0
    
71d9c0
    With this patch, sysUT_var is filled for all code branches where it is needed.
71d9c0
71d9c0
diff --git a/agent/mibgroup/disman/event/mteTrigger.c b/agent/mibgroup/disman/event/mteTrigger.c
71d9c0
index bb585ed..11cb5b7 100644
71d9c0
--- a/agent/mibgroup/disman/event/mteTrigger.c
71d9c0
+++ b/agent/mibgroup/disman/event/mteTrigger.c
71d9c0
@@ -533,6 +533,13 @@ mteTrigger_run( unsigned int reg, void *clientarg)
71d9c0
         } /* !old_results - end of else block */
71d9c0
     } /* MTE_TRIGGER_EXISTENCE */
71d9c0
 
71d9c0
+    /*
71d9c0
+     * We'll need sysUpTime.0 regardless...
71d9c0
+     */
71d9c0
+    DEBUGMSGTL(("disman:event:delta", "retrieve sysUpTime.0\n"));
71d9c0
+    memset( &sysUT_var, 0, sizeof( netsnmp_variable_list ));
71d9c0
+    snmp_set_var_objid( &sysUT_var, _sysUpTime_instance, _sysUpTime_inst_len );
71d9c0
+    netsnmp_query_get(  &sysUT_var, entry->session );
71d9c0
 
71d9c0
     if (( entry->mteTriggerTest & MTE_TRIGGER_BOOLEAN   ) ||
71d9c0
         ( entry->mteTriggerTest & MTE_TRIGGER_THRESHOLD )) {
71d9c0
@@ -582,14 +589,6 @@ mteTrigger_run( unsigned int reg, void *clientarg)
71d9c0
          * (including sysUpTime.0 if not specified explicitly).
71d9c0
          */
71d9c0
         if ( entry->flags & MTE_TRIGGER_FLAG_DELTA ) {
71d9c0
-            /*
71d9c0
-             * We'll need sysUpTime.0 regardless...
71d9c0
-             */
71d9c0
-            DEBUGMSGTL(("disman:event:delta", "retrieve sysUpTime.0\n"));
71d9c0
-            memset( &sysUT_var, 0, sizeof( netsnmp_variable_list ));
71d9c0
-            snmp_set_var_objid( &sysUT_var, _sysUpTime_instance,
71d9c0
-                                            _sysUpTime_inst_len );
71d9c0
-            netsnmp_query_get(  &sysUT_var, entry->session );
71d9c0
 
71d9c0
             if (!(entry->flags & MTE_TRIGGER_FLAG_SYSUPT)) {
71d9c0
                 /*