]> git.ipfire.org Git - thirdparty/suricata.git/commitdiff
leak: Fixes leak in DetectAppLayerEventPrepare
authorPhilippe Antoine <contact@catenacyber.fr>
Wed, 3 Jul 2019 14:39:19 +0000 (16:39 +0200)
committerVictor Julien <victor@inliniac.net>
Wed, 3 Jul 2019 15:06:56 +0000 (17:06 +0200)
src/detect-app-layer-event.c

index 9452ee434090ea903f4143102fa69bc77ebdd5ea..5459049af5fa3d8ec7903ca2b7a2dc001fb41793 100644 (file)
@@ -349,14 +349,28 @@ static void DetectAppLayerEventFree(void *ptr)
 int DetectAppLayerEventPrepare(Signature *s)
 {
     SigMatch *sm = s->init_data->smlists[g_applayer_events_list_id];
+    SigMatch *smn;
     s->init_data->smlists[g_applayer_events_list_id] = NULL;
     s->init_data->smlists_tail[g_applayer_events_list_id] = NULL;
 
     while (sm != NULL) {
+        // save it for later use in loop
+        smn = sm->next;
+        /* these will be overwritten in SigMatchAppendSMToList
+         * called by DetectAppLayerEventSetupP2
+         */
         sm->next = sm->prev = NULL;
-        if (DetectAppLayerEventSetupP2(s, sm) < 0)
+        if (DetectAppLayerEventSetupP2(s, sm) < 0) {
+            // current one was freed, let's free the next ones
+            sm = smn;
+            while(sm) {
+                smn = sm->next;
+                SigMatchFree(sm);
+                sm = smn;
+            }
             return -1;
-        sm = sm->next;
+        }
+        sm = smn;
     }
 
     return 0;