defrag: timeout check on look up; tag for removal

pull/11227/head
Victor Julien 2 years ago committed by Victor Julien
parent 83dc703d1f
commit becc91c306

@ -20,6 +20,7 @@
#include "defrag-hash.h"
#include "defrag-stack.h"
#include "defrag-config.h"
#include "defrag-timeout.h"
#include "util-random.h"
#include "util-byte.h"
#include "util-misc.h"
@ -557,14 +558,17 @@ DefragTracker *DefragGetTrackerFromHash(ThreadVars *tv, DecodeThreadVars *dtv, P
dt = hb->head;
do {
if (!dt->remove && DefragTrackerCompare(dt, p)) {
if (DefragTrackerTimedOut(dt, p->ts)) {
dt->remove = 1;
} else if (!dt->remove && DefragTrackerCompare(dt, p)) {
/* found our tracker, lock & return */
SCMutexLock(&dt->lock);
(void)DefragTrackerIncrUsecnt(dt);
DRLOCK_UNLOCK(hb);
return dt;
}
} else if (dt->hnext == NULL) {
if (dt->hnext == NULL) {
DefragTracker *prev = dt;
dt = DefragTrackerGetNew(tv, dtv, p);
if (dt == NULL) {

@ -36,7 +36,7 @@
* \retval 0 not timed out just yet
* \retval 1 fully timed out, lets kill it
*/
static int DefragTrackerTimedOut(DefragTracker *dt, SCTime_t ts)
int DefragTrackerTimedOut(DefragTracker *dt, SCTime_t ts)
{
/** never prune a trackers that is used by a packet
* we are currently processing in one of the threads */

@ -24,6 +24,9 @@
#ifndef SURICATA_DEFRAG_TIMEOUT_H
#define SURICATA_DEFRAG_TIMEOUT_H
#include "defrag.h"
int DefragTrackerTimedOut(DefragTracker *dt, SCTime_t ts);
uint32_t DefragTimeoutHash(SCTime_t ts);
#endif

Loading…
Cancel
Save