From: Philippe Antoine Date: Wed, 3 Jul 2019 14:39:19 +0000 (+0200) Subject: leak: Fixes leak in DetectAppLayerEventPrepare X-Git-Tag: suricata-5.0.0-rc1~216 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=66c500eaac41bd471efe9d0171ec09a0be98417a;p=thirdparty%2Fsuricata.git leak: Fixes leak in DetectAppLayerEventPrepare --- diff --git a/src/detect-app-layer-event.c b/src/detect-app-layer-event.c index 9452ee4340..5459049af5 100644 --- a/src/detect-app-layer-event.c +++ b/src/detect-app-layer-event.c @@ -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;