[Oisf-devel] [PATCH] memory leak cleanup in alerts

Steve Grubb sgrubb at redhat.com
Sun Jan 24 19:24:12 UTC 2010


Hello,

I ran the code through an analysis program and found several memory leaks
in the alert code.

*In src/alert-fastlog.c at line 178, aft was not being freed
*In src/alert-debuglog.c at line 205, aftwas not being freed
*In src/alert-unified-log.c at lines 234 and 243, aun was not being freed
*In src/alert-unified-alert.c at lines 219 and 230, aun was not being freed
*In src/alert-unified2-alert.c at line 505, aun was not being freed

The patch below fixes this.

-Steve



diff -urp suricata-0.8.1.orig/src/alert-debuglog.c suricata-0.8.1/src/alert-debuglog.c
--- suricata-0.8.1.orig/src/alert-debuglog.c	2010-01-24 09:08:23.000000000 -0500
+++ suricata-0.8.1/src/alert-debuglog.c	2010-01-24 13:52:48.000000000 -0500
@@ -202,6 +202,7 @@ TmEcode AlertDebugLogThreadInit(ThreadVa
     if(initdata == NULL)
     {
         SCLogDebug("Error getting context for DebugLog.  \"initdata\" argument NULL");
+        free(aft);
         return TM_ECODE_FAILED;
     }
     /** Use the Ouptut Context (file pointer and mutex) */
diff -urp suricata-0.8.1.orig/src/alert-fastlog.c suricata-0.8.1/src/alert-fastlog.c
--- suricata-0.8.1.orig/src/alert-fastlog.c	2010-01-24 09:08:23.000000000 -0500
+++ suricata-0.8.1/src/alert-fastlog.c	2010-01-24 13:51:52.000000000 -0500
@@ -175,6 +175,7 @@ TmEcode AlertFastLogThreadInit(ThreadVar
     if(initdata == NULL)
     {
         SCLogDebug("Error getting context for AlertFastLog.  \"initdata\" argument NULL");
+        free(aft);
         return TM_ECODE_FAILED;
     }
     /** Use the Ouptut Context (file pointer and mutex) */
diff -urp suricata-0.8.1.orig/src/alert-unified2-alert.c suricata-0.8.1/src/alert-unified2-alert.c
--- suricata-0.8.1.orig/src/alert-unified2-alert.c	2010-01-24 09:08:23.000000000 -0500
+++ suricata-0.8.1/src/alert-unified2-alert.c	2010-01-24 13:56:36.000000000 -0500
@@ -502,6 +502,7 @@ TmEcode Unified2AlertThreadInit(ThreadVa
     if(initdata == NULL)
     {
         SCLogDebug("Error getting context for Unified2Alert.  \"initdata\" argument NULL");
+        free(aun);
         return TM_ECODE_FAILED;
     }
     /** Use the Ouptut Context (file pointer and mutex) */
diff -urp suricata-0.8.1.orig/src/alert-unified-alert.c suricata-0.8.1/src/alert-unified-alert.c
--- suricata-0.8.1.orig/src/alert-unified-alert.c	2010-01-24 09:08:23.000000000 -0500
+++ suricata-0.8.1/src/alert-unified-alert.c	2010-01-24 13:55:49.000000000 -0500
@@ -216,6 +216,7 @@ TmEcode AlertUnifiedAlertThreadInit(Thre
     if(initdata == NULL)
     {
         SCLogDebug("Error getting context for UnifiedAlert.  \"initdata\" argument NULL");
+        free(aun);
         return TM_ECODE_FAILED;
     }
     /** Use the Ouptut Context (file pointer and mutex) */
@@ -227,6 +228,7 @@ TmEcode AlertUnifiedAlertThreadInit(Thre
     if (ret != 0) {
         SCLogError(SC_ERR_UNIFIED_ALERT_GENERIC_ERROR,
                    "Error: AlertUnifiedLogWriteFileHeader failed");
+        free(aun);
         return TM_ECODE_FAILED;
     }
 
diff -urp suricata-0.8.1.orig/src/alert-unified-log.c suricata-0.8.1/src/alert-unified-log.c
--- suricata-0.8.1.orig/src/alert-unified-log.c	2010-01-24 09:08:23.000000000 -0500
+++ suricata-0.8.1/src/alert-unified-log.c	2010-01-24 13:54:22.000000000 -0500
@@ -231,6 +231,7 @@ TmEcode AlertUnifiedLogThreadInit(Thread
     if(initdata == NULL)
     {
         SCLogDebug("Error getting context for UnifiedLog.  \"initdata\" argument NULL");
+        free(aun);
         return TM_ECODE_FAILED;
     }
     /** Use the Ouptut Context (file pointer and mutex) */
@@ -240,6 +241,7 @@ TmEcode AlertUnifiedLogThreadInit(Thread
     int ret = AlertUnifiedLogWriteFileHeader(t, aun);
     if (ret != 0) {
         printf("Error: AlertUnifiedLogWriteFileHeader failed.\n");
+        free(aun);
         return TM_ECODE_FAILED;
     }
 



More information about the Oisf-devel mailing list