]> git.ipfire.org Git - thirdparty/suricata.git/commitdiff
pcap: fix buffer size validation logic
authorVictor Julien <victor@inliniac.net>
Tue, 23 Oct 2018 12:51:25 +0000 (14:51 +0200)
committerVictor Julien <victor@inliniac.net>
Tue, 30 Oct 2018 09:21:34 +0000 (10:21 +0100)
src/runmode-pcap.c
src/source-pcap.c

index 850bcb7e3975bad84cd6cdd6a024d2e6e2b15dd7..04325ee383f49dda7ba3c2fee73b4f4bc5e36070 100644 (file)
@@ -99,8 +99,14 @@ static void *ParsePcapConfig(const char *iface)
     aconf->buffer_size = 0;
     /* If set command line option has precedence over config */
     if ((ConfGetInt("pcap.buffer-size", &value)) == 1) {
-        SCLogInfo("Pcap will use %d buffer size", (int)value);
-        aconf->buffer_size = value;
+        if (value >= 0 && value <= INT_MAX) {
+            SCLogInfo("Pcap will use %d buffer size", (int)value);
+            aconf->buffer_size = value;
+        } else {
+            SCLogWarning(SC_ERR_INVALID_ARGUMENT, "pcap.buffer-size "
+                    "value of %"PRIiMAX" is invalid. Valid range is "
+                    "0-2147483647", value);
+        }
     }
 
     aconf->checksum_mode = CHECKSUM_VALIDATION_AUTO;
index 3e488f73cfb737ad5f68639b272fd4f6c292052f..ddb34c7f02c041cd05a3815d6f997ec94a180e31 100644 (file)
@@ -408,9 +408,8 @@ TmEcode ReceivePcapThreadInit(ThreadVars *tv, const void *initdata, void **data)
     }
 #ifdef HAVE_PCAP_SET_BUFF
     ptv->pcap_buffer_size = pcapconfig->buffer_size;
-    if (ptv->pcap_buffer_size >= 0 && ptv->pcap_buffer_size <= INT_MAX) {
-        if (ptv->pcap_buffer_size > 0)
-            SCLogInfo("Going to use pcap buffer size of %" PRId32 "", ptv->pcap_buffer_size);
+    if (ptv->pcap_buffer_size > 0) {
+        SCLogInfo("Going to use pcap buffer size of %" PRId32 "", ptv->pcap_buffer_size);
 
         int pcap_set_buffer_size_r = pcap_set_buffer_size(ptv->pcap_handle,ptv->pcap_buffer_size);
         //printf("ReceivePcapThreadInit: pcap_set_timeout(%p) returned %" PRId32 "\n", ptv->pcap_handle, pcap_set_buffer_size_r);