From: Victor Julien Date: Mon, 11 Nov 2019 14:26:32 +0000 (+0100) Subject: sources: fix pipeline failure handling X-Git-Tag: suricata-6.0.0-beta1~803 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=7c83cb585e634fab7f94a5b4ebddbc54365325d9;p=thirdparty%2Fsuricata.git sources: fix pipeline failure handling 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. --- diff --git a/src/source-af-packet.c b/src/source-af-packet.c index 3bc03fe57c..c2a55099d2 100644 --- a/src/source-af-packet.c +++ b/src/source-af-packet.c @@ -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); } diff --git a/src/source-erf-dag.c b/src/source-erf-dag.c index d257466162..c7788e7af4 100644 --- a/src/source-erf-dag.c +++ b/src/source-erf-dag.c @@ -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); } diff --git a/src/source-ipfw.c b/src/source-ipfw.c index 1fc8dabbe2..bf7e4db8d1 100644 --- a/src/source-ipfw.c +++ b/src/source-ipfw.c @@ -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); } diff --git a/src/source-napatech.c b/src/source-napatech.c index e97bf66180..15ea3cf5ae 100644 --- a/src/source-napatech.c +++ b/src/source-napatech.c @@ -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); } diff --git a/src/source-netmap.c b/src/source-netmap.c index 210c1ee81c..1fa6bdba68 100644 --- a/src/source-netmap.c +++ b/src/source-netmap.c @@ -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); } /** diff --git a/src/source-nflog.c b/src/source-nflog.c index e5929c65a5..a954634755 100644 --- a/src/source-nflog.c +++ b/src/source-nflog.c @@ -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; } diff --git a/src/source-nfq.c b/src/source-nfq.c index b5a143decc..4358a27aec 100644 --- a/src/source-nfq.c +++ b/src/source-nfq.c @@ -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; diff --git a/src/source-pfring.c b/src/source-pfring.c index 2f5487b45f..0dafecb776 100644 --- a/src/source-pfring.c +++ b/src/source-pfring.c @@ -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); } diff --git a/src/source-windivert.c b/src/source-windivert.c index 30c8aa3b50..8d7e59cdf8 100644 --- a/src/source-windivert.c +++ b/src/source-windivert.c @@ -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); }