]> 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 <victor@inliniac.net>
Fri, 7 Feb 2020 14:43:10 +0000 (15:43 +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.

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

index 3bc03fe57c36a000d035254c211470dc7a4805ec..c2a55099d2678201fd66424a4df31e807a993f1b 100644 (file)
@@ -710,7 +710,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);
@@ -1026,7 +1025,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);
         }
 
@@ -1127,7 +1125,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 d2574661622e831b00f34df238bbc6b68a2166cc..c7788e7af4b4e88d86ca75e8c2fb3ba6d3b8c404 100644 (file)
@@ -540,7 +540,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 1fc8dabbe252a4cb2860bbb2e3292e5045e4d0cd..bf7e4db8d1950bf9fe2af8f19beab4bfa8b21b73 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 e97bf66180f849857b86cfec6feba63f44acb1ec..15ea3cf5aeed4c62efc749fa723841c1255ab421 100644 (file)
@@ -450,7 +450,6 @@ TmEcode NapatechPacketLoopZC(ThreadVars *tv, void *data, void *slot)
         }
 
         if (unlikely(TmThreadsSlotProcessPkt(ntv->tv, ntv->slot, p) != TM_ECODE_OK)) {
-            TmqhOutputPacketpool(ntv->tv, p);
             NT_NetRxRelease(ntv->rx_stream, packet_buffer);
             SCReturnInt(TM_ECODE_FAILED);
         }
index 210c1ee81c7c0a6f032e1b0786d8f60d22b4c989..1fa6bdba68a30299988d21324bf2d5f35aa65f1b 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 e5929c65a5c39af6eefdca250c954ebe99b5962e..a954634755cafafc6f07e6bba2f972c156be08a9 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 b5a143decc734836a49314f6f1641a5b28eaa449..4358a27aec92680196830ebe6ffd4ba0bbdbba1b 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 2f5487b45fadb7e2845f3d71b1456b37eb386a8b..0dafecb7763899c74791912060d80db0a3780e95 100644 (file)
@@ -419,7 +419,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 30c8aa3b5046e854ec2f9d96f31cc8d119583e38..8d7e59cdf850c07ce5b0eb621d68322781a87d4d 100644 (file)
@@ -498,7 +498,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);
     }