From: Victor Julien Date: Fri, 24 May 2024 17:14:10 +0000 (+0200) Subject: defrag: remove tracker on frag pool issues X-Git-Tag: suricata-8.0.0-beta1~1221 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=dcaeed7b956c8240cea9f403818ce9622fc651d4;p=thirdparty%2Fsuricata.git defrag: remove tracker on frag pool issues If a frag wasn't inserted due to pool empty or alloc failure, clear and invalidate the tracker. --- diff --git a/src/defrag.c b/src/defrag.c index c20aefc2af..3802bba392 100644 --- a/src/defrag.c +++ b/src/defrag.c @@ -872,7 +872,7 @@ DefragInsertFrag(ThreadVars *tv, DecodeThreadVars *dtv, DefragTracker *tracker, } else { ENGINE_SET_EVENT(p, IPV6_FRAG_IGNORED); } - goto done; + goto error_remove_tracker; } new->pkt = SCMalloc(GET_PKT_LEN(p)); if (new->pkt == NULL) { @@ -884,7 +884,7 @@ DefragInsertFrag(ThreadVars *tv, DecodeThreadVars *dtv, DefragTracker *tracker, } else { ENGINE_SET_EVENT(p, IPV6_FRAG_IGNORED); } - goto done; + goto error_remove_tracker; } memcpy(new->pkt, GET_PKT_DATA(p) + ltrim, GET_PKT_LEN(p) - ltrim); new->len = (GET_PKT_LEN(p) - ltrim); @@ -965,6 +965,10 @@ done: } } return r; +error_remove_tracker: + tracker->remove = 1; + DefragTrackerFreeFrags(tracker); + return NULL; } /**