[Oisf-devel] [PATCH] memory leak cleanups in misc places

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


Hello,

This is all the rest of the memory leaks I found.

*In src/source-pcap-file.c at line 152, ptv is not being freed.
*In src/util-unittest-helper.c at line 152, p was not being freed.
*In src/log-httplog.c at line 195, aft was not being freed
*In src/counters.c at line 51, log_filename was not being freed. At line 1188
pctx is being tested to see if its NULL. However, at 1173 it exits the
function if it were NULL. This test is not needed and should be deleted.
*In src/defrag.c at line 351, tracker was not being freed. At line 390, dc is
being checked for NULL but this was already done at line 384. Probably what
was meant was checking the value of dc->frag_table which was just assigned.

The patch below makes the above described changes.

-Steve


diff -urp suricata-0.8.1.orig/src/counters.c suricata-0.8.1/src/counters.c
--- suricata-0.8.1.orig/src/counters.c	2010-01-24 09:08:23.000000000 -0500
+++ suricata-0.8.1/src/counters.c	2010-01-24 14:02:28.000000000 -0500
@@ -48,6 +48,7 @@ static char *SCPerfGetLogFilename(void)
     if (snprintf(log_filename, PATH_MAX, "%s/%s", log_dir,
                  SC_PERF_DEFAULT_LOG_FILENAME) < 0) {
         SCLogError(SC_SPRINTF_ERROR, "Sprintf Error");
+        free(log_filename);
         return NULL;
     }
 
@@ -1185,11 +1186,6 @@ SCPerfCounterArray *SCPerfGetCounterArra
         return NULL;
     }
 
-    if (pctx == NULL) {
-        SCLogDebug("perfcontext is NULL");
-        return NULL;
-    }
-
     if ( (pca = malloc(sizeof(SCPerfCounterArray))) == NULL) {
         SCLogError(SC_ERR_MEM_ALLOC, "Error allocating memory");
         exit(EXIT_FAILURE);
diff -urp suricata-0.8.1.orig/src/defrag.c suricata-0.8.1/src/defrag.c
--- suricata-0.8.1.orig/src/defrag.c	2010-01-24 09:08:23.000000000 -0500
+++ suricata-0.8.1/src/defrag.c	2010-01-24 14:12:04.000000000 -0500
@@ -347,8 +347,10 @@ DefragTrackerNew(void *arg)
     tracker = calloc(1, sizeof(*tracker));
     if (tracker == NULL)
         return NULL;
-    if (SCMutexInit(&tracker->lock, NULL) != 0)
+    if (SCMutexInit(&tracker->lock, NULL) != 0) {
+        free(tracker);
         return NULL;
+    }
     tracker->dc = dc;
     TAILQ_INIT(&tracker->frags);
 
@@ -387,7 +389,7 @@ DefragContextNew(void)
     /* Initialize the hash table. */
     dc->frag_table = HashListTableInit(DEFAULT_DEFRAG_HASH_SIZE, DefragHashFunc,
         DefragHashCompare, DefragHashFree);
-    if (dc == NULL) {
+    if (dc->frag_table == NULL) {
         SCLogError(SC_ERR_MEM_ALLOC,
             "Defrag: Failed to initialize hash table.");
         exit(EXIT_FAILURE);
diff -urp suricata-0.8.1.orig/src/log-httplog.c suricata-0.8.1/src/log-httplog.c
--- suricata-0.8.1.orig/src/log-httplog.c	2010-01-24 09:08:23.000000000 -0500
+++ suricata-0.8.1/src/log-httplog.c	2010-01-24 13:57:18.000000000 -0500
@@ -192,6 +192,7 @@ TmEcode LogHttpLogThreadInit(ThreadVars 
     if(initdata == NULL)
     {
         SCLogDebug("Error getting context for HTTPLog.  \"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/source-pcap-file.c suricata-0.8.1/src/source-pcap-file.c
--- suricata-0.8.1.orig/src/source-pcap-file.c	2010-01-24 09:08:23.000000000 -0500
+++ suricata-0.8.1/src/source-pcap-file.c	2010-01-24 10:53:58.000000000 -0500
@@ -150,6 +150,7 @@ TmEcode ReceivePcapFileThreadInit(Thread
 
         default:
             printf("Error: datalink type %" PRId32 " not yet supported in module PcapFile.\n", pcap_g.datalink);
+            free(ptv);
             return TM_ECODE_FAILED;
     }
 
diff -urp suricata-0.8.1.orig/src/util-unittest-helper.c suricata-0.8.1/src/util-unittest-helper.c
--- suricata-0.8.1.orig/src/util-unittest-helper.c	2010-01-24 09:08:23.000000000 -0500
+++ suricata-0.8.1/src/util-unittest-helper.c	2010-01-24 13:19:23.000000000 -0500
@@ -149,6 +149,7 @@ Packet **UTHBuildPacketArrayFromEth(uint
         p[i] = malloc(sizeof(Packet));
         if (p[i] == NULL) {
             SCLogError(SC_ERR_MEM_ALLOC, "Error allocating memory for a packet of the array");
+            free(p);
             return NULL;
         }
         memset(p[i], 0, sizeof(Packet));



More information about the Oisf-devel mailing list