]> git.ipfire.org Git - thirdparty/suricata.git/commitdiff
pcap: improve pcap_breakloop support
authorVictor Julien <vjulien@oisf.net>
Tue, 11 Apr 2023 09:40:35 +0000 (11:40 +0200)
committerVictor Julien <vjulien@oisf.net>
Thu, 13 Apr 2023 05:34:48 +0000 (07:34 +0200)
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)

src/source-pcap.c

index 90f81f6b7f6b21b44887104e58ab675aaa98810d..b13fea57e3b01e2e8b095b41f2091046f2206bd0 100644 (file)
@@ -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);
             }