aboutsummaryrefslogtreecommitdiffstats
path: root/framework/src/suricata/src/defrag-hash.c
diff options
context:
space:
mode:
Diffstat (limited to 'framework/src/suricata/src/defrag-hash.c')
-rw-r--r--framework/src/suricata/src/defrag-hash.c19
1 files changed, 4 insertions, 15 deletions
diff --git a/framework/src/suricata/src/defrag-hash.c b/framework/src/suricata/src/defrag-hash.c
index 9cb377e5..e37a0873 100644
--- a/framework/src/suricata/src/defrag-hash.c
+++ b/framework/src/suricata/src/defrag-hash.c
@@ -96,24 +96,13 @@ static void DefragTrackerInit(DefragTracker *dt, Packet *p)
dt->vlan_id[1] = p->vlan_id[1];
dt->policy = DefragGetOsPolicy(p);
dt->host_timeout = DefragPolicyGetHostTimeout(p);
+ dt->remove = 0;
+ dt->seen_last = 0;
TAILQ_INIT(&dt->frags);
(void) DefragTrackerIncrUsecnt(dt);
}
-static DefragTracker *DefragTrackerNew(Packet *p)
-{
- DefragTracker *dt = DefragTrackerAlloc();
- if (dt == NULL)
- goto error;
-
- DefragTrackerInit(dt, p);
- return dt;
-
-error:
- return NULL;
-}
-
void DefragTrackerRelease(DefragTracker *t)
{
(void) DefragTrackerDecrUsecnt(t);
@@ -467,7 +456,7 @@ static DefragTracker *DefragTrackerGetNew(Packet *p)
/* freed a tracker, but it's unlocked */
} else {
/* now see if we can alloc a new tracker */
- dt = DefragTrackerNew(p);
+ dt = DefragTrackerAlloc();
if (dt == NULL) {
return NULL;
}
@@ -526,7 +515,7 @@ DefragTracker *DefragGetTrackerFromHash (Packet *p)
dt = hb->head;
/* see if this is the tracker we are looking for */
- if (DefragTrackerCompare(dt, p) == 0) {
+ if (dt->remove || DefragTrackerCompare(dt, p) == 0) {
DefragTracker *pdt = NULL; /* previous tracker */
while (dt) {