]> git.ipfire.org Git - thirdparty/suricata.git/commitdiff
sources: fix pipeline failure handling
authorVictor Julien <victor@inliniac.net>
Mon, 11 Nov 2019 14:26:32 +0000 (15:26 +0100)
committerVictor Julien <vjulien@oisf.net>
Fri, 12 Nov 2021 10:51:10 +0000 (11:51 +0100)
When TmThreadsSlotProcessPkt fails it will return the packet that was
passed to it to the packetpool.

Some of the packet sources were doing this manually as well. This patch
fixes those sources.

(cherry picked from commit 7c83cb585e634fab7f94a5b4ebddbc54365325d9)

src/source-af-packet.c
src/source-erf-dag.c
src/source-ipfw.c
src/source-netmap.c
src/source-nflog.c
src/source-nfq.c
src/source-pfring.c
src/source-windivert.c

index 49bb02723fc58ea2cfdf955782e1489f78decf51..5e19fdd6878703816ed8c3bf30732d63be71d6d8 100644 (file)
@@ -744,7 +744,6 @@ static int AFPRead(AFPThreadVars *ptv)
     }
 
     if (TmThreadsSlotProcessPkt(ptv->tv, ptv->slot, p) != TM_ECODE_OK) {
-        TmqhOutputPacketpool(ptv->tv, p);
         SCReturnInt(AFP_SURI_FAILURE);
     }
     SCReturnInt(AFP_READ_OK);
@@ -1058,7 +1057,6 @@ static int AFPReadFromRing(AFPThreadVars *ptv)
             if (++ptv->frame_offset >= ptv->req.v2.tp_frame_nr) {
                 ptv->frame_offset = 0;
             }
-            TmqhOutputPacketpool(ptv->tv, p);
             SCReturnInt(AFP_SURI_FAILURE);
         }
 
@@ -1157,7 +1155,6 @@ static inline int AFPParsePacketV3(AFPThreadVars *ptv, struct tpacket_block_desc
     }
 
     if (TmThreadsSlotProcessPkt(ptv->tv, ptv->slot, p) != TM_ECODE_OK) {
-        TmqhOutputPacketpool(ptv->tv, p);
         SCReturnInt(AFP_SURI_FAILURE);
     }
 
index 4265641949aa6177b7ea608e8e2cf5c490c39c19..773830d36d58cc08af5aee32588e360641178a78 100644 (file)
@@ -542,7 +542,6 @@ ProcessErfDagRecord(ErfDagThreadVars *ewtn, char *prec)
     ewtn->bytes += wlen;
 
     if (TmThreadsSlotProcessPkt(ewtn->tv, ewtn->slot, p) != TM_ECODE_OK) {
-        TmqhOutputPacketpool(ewtn->tv, p);
         SCReturnInt(TM_ECODE_FAILED);
     }
 
index 008189822857a121e4cd34fc801e93bd230601ac..42afc276e4d50fa81fad6adb9be604de8243313f 100644 (file)
@@ -304,7 +304,6 @@ TmEcode ReceiveIPFWLoop(ThreadVars *tv, void *data, void *slot)
 
         if (TmThreadsSlotProcessPkt(tv, ((TmSlot *) slot)->slot_next, p)
                 != TM_ECODE_OK) {
-            TmqhOutputPacketpool(tv, p);
             SCReturnInt(TM_ECODE_FAILED);
         }
 
index 3cea7dc691f09bba7f4afbf40437fb778b14220e..e9b74274e54527ac9c1b06da0b7338694d38860d 100644 (file)
@@ -590,11 +590,7 @@ static void NetmapCallback(u_char *user, const struct nm_pkthdr *ph, const u_cha
     SCLogDebug("pktlen: %" PRIu32 " (pkt %p, pkt data %p)",
             GET_PKT_LEN(p), p, GET_PKT_DATA(p));
 
-    if (TmThreadsSlotProcessPkt(ntv->tv, ntv->slot, p) != TM_ECODE_OK) {
-        TmqhOutputPacketpool(ntv->tv, p);
-        return;
-    }
-    return;
+    (void)TmThreadsSlotProcessPkt(ntv->tv, ntv->slot, p);
 }
 
 /**
index 38ddd309024155c0604844742c69727012e8d645..218c9c6885d74f6d280f9c9bb1cfb285cf6648cf 100644 (file)
@@ -193,7 +193,6 @@ static int NFLOGCallback(struct nflog_g_handle *gh, struct nfgenmsg *msg,
     (void) SC_ATOMIC_ADD(ntv->livedev->pkts, 1);
 
     if (TmThreadsSlotProcessPkt(ntv->tv, ntv->slot, p) != TM_ECODE_OK) {
-        TmqhOutputPacketpool(ntv->tv, p);
         return -1;
     }
 
index a0cab39b5e19c4eb7698a53f3c156f1adbdb005a..f7875d7ef394f1bca45f08e813ea9d4558252572 100644 (file)
@@ -562,14 +562,8 @@ static int NFQCallBack(struct nfq_q_handle *qh, struct nfgenmsg *nfmsg,
 #endif /* COUNTERS */
     (void) SC_ATOMIC_ADD(ntv->livedev->pkts, 1);
 
-    if (ntv->slot) {
-        if (TmThreadsSlotProcessPkt(tv, ntv->slot, p) != TM_ECODE_OK) {
-            TmqhOutputPacketpool(ntv->tv, p);
-            return -1;
-        }
-    } else {
-        /* pass on... */
-        tv->tmqh_out(tv, p);
+    if (TmThreadsSlotProcessPkt(tv, ntv->slot, p) != TM_ECODE_OK) {
+        return -1;
     }
 
     return 0;
index 6653549fab8080470dee6490b37a8ef4b7bd5c5d..9c84c02d7d9fb1e0ddf7a9d970599153f5c60458 100644 (file)
@@ -417,7 +417,6 @@ TmEcode ReceivePfringLoop(ThreadVars *tv, void *data, void *slot)
             PfringProcessPacket(ptv, &hdr, p);
 
             if (TmThreadsSlotProcessPkt(ptv->tv, ptv->slot, p) != TM_ECODE_OK) {
-                TmqhOutputPacketpool(ptv->tv, p);
                 SCReturnInt(TM_ECODE_FAILED);
             }
 
index 1c549712d8b5487004c24592d7c6331ce0048cbd..7be8bbb074c39143a3fbb25c8f8609093cc4980e 100644 (file)
@@ -500,7 +500,6 @@ static TmEcode WinDivertRecvHelper(ThreadVars *tv, WinDivertThreadVars *wd_tv)
      * or push it to a packet pool. So processing time can vary.
      */
     if (TmThreadsSlotProcessPkt(tv, wd_tv->slot, p) != TM_ECODE_OK) {
-        TmqhOutputPacketpool(tv, p);
         SCReturnInt(TM_ECODE_FAILED);
     }