From: Victor Julien Date: Tue, 11 Apr 2023 09:40:35 +0000 (+0200) Subject: pcap: improve pcap_breakloop support X-Git-Tag: suricata-6.0.11~7 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=80abc3121d40a2c28ff896516a012d49adf63434;p=thirdparty%2Fsuricata.git pcap: improve pcap_breakloop support When pcap_breakloop has been issued on a handle, the current pcap_dispatch call may return -2 (PCAP_ERROR_BREAK), but it can also return the number of processed packets if lower than the desired number. So add this condition as a check. (cherry picked from commit 9fe08f2374f690a901205f0df073b702f92b6345) (cherry picked from commit 2ddd26446e3a568074650cf16ec4ad8402acdcd4) --- diff --git a/src/source-pcap.c b/src/source-pcap.c index 90f81f6b7f..b13fea57e3 100644 --- a/src/source-pcap.c +++ b/src/source-pcap.c @@ -321,7 +321,7 @@ static TmEcode ReceivePcapLoop(ThreadVars *tv, void *data, void *slot) int r = pcap_dispatch(ptv->pcap_handle, packet_q_len, (pcap_handler)PcapCallbackLoop, (u_char *)ptv); - if (unlikely(r == 0 || r == PCAP_ERROR_BREAK)) { + if (unlikely(r == 0 || r == PCAP_ERROR_BREAK || (r > 0 && r < packet_q_len))) { if (r == PCAP_ERROR_BREAK && ptv->cb_result == TM_ECODE_FAILED) { SCReturnInt(TM_ECODE_FAILED); }