]> git.ipfire.org Git - thirdparty/suricata.git/commitdiff
flow/timeout: no pseudo packets for dropped flows
authorVictor Julien <vjulien@oisf.net>
Wed, 31 May 2023 13:56:54 +0000 (15:56 +0200)
committerVictor Julien <vjulien@oisf.net>
Fri, 2 Jun 2023 10:17:16 +0000 (12:17 +0200)
When a flow is in the drop flow state, don't use pseudo packets
when it is timing out. There should be no work left to do at this
point.

(cherry picked from commit 2a9515471287d2b8fc5aa2e1879aabadaf5f421e)

src/flow-manager.c
src/flow-worker.c

index 44d8446439101133733d1df5d125f840b3a12445..9cfd218df70330779dc25fa7e83bb9ea0bc899ef 100644 (file)
@@ -279,7 +279,8 @@ static uint32_t ProcessAsideQueue(FlowManagerTimeoutThread *td, FlowTimeoutCount
     while ((f = FlowQueuePrivateGetFromTop(&td->aside_queue)) != NULL) {
         /* flow is still locked */
 
-        if (f->proto == IPPROTO_TCP && !(f->flags & FLOW_TIMEOUT_REASSEMBLY_DONE) &&
+        if (f->proto == IPPROTO_TCP &&
+                !(f->flags & (FLOW_TIMEOUT_REASSEMBLY_DONE | FLOW_ACTION_DROP)) &&
                 !FlowIsBypassed(f) && FlowForceReassemblyNeedReassembly(f) == 1) {
             /* Send the flow to its thread */
             FlowForceReassemblyForFlow(f);
index ab2a2a6385480a2b35afbf7ff07cedb10e04abe6..5d4ccd28eb0aa1486d1fb170d4976a5e847e176c 100644 (file)
@@ -171,8 +171,9 @@ static void CheckWorkQueue(ThreadVars *tv, FlowWorkerThreadData *fw, FlowTimeout
         f->flow_end_flags |= FLOW_END_FLAG_TIMEOUT; //TODO emerg
 
         if (f->proto == IPPROTO_TCP) {
-            if (!(f->flags & FLOW_TIMEOUT_REASSEMBLY_DONE) && !FlowIsBypassed(f) &&
-                    FlowForceReassemblyNeedReassembly(f) == 1 && f->ffr != 0) {
+            if (!(f->flags & (FLOW_TIMEOUT_REASSEMBLY_DONE | FLOW_ACTION_DROP)) &&
+                    !FlowIsBypassed(f) && FlowForceReassemblyNeedReassembly(f) == 1 &&
+                    f->ffr != 0) {
                 /* read detect thread in case we're doing a reload */
                 void *detect_thread = SC_ATOMIC_GET(fw->detect_thread);
                 int cnt = FlowFinish(tv, f, fw, detect_thread);