]> git.ipfire.org Git - thirdparty/suricata.git/commitdiff
debug-validation: fix packet check
authorVictor Julien <victor@inliniac.net>
Sat, 8 Feb 2014 09:35:47 +0000 (10:35 +0100)
committerVictor Julien <victor@inliniac.net>
Sun, 9 Feb 2014 10:03:39 +0000 (11:03 +0100)
On fragments and invalid packets we can have p->proto set, while the
matching protocol header pointer is null.

src/util-validate.h

index b26bab6175381f63e87b5f611a3e7b1a19b12462..b5c3da26b2c3cdb91985da3fc28934eac542d3d7 100644 (file)
         if ((p)->flow != NULL) {                    \
             DEBUG_VALIDATE_FLOW((p)->flow);         \
         }                                           \
-        if ((p)->proto == IPPROTO_TCP) {            \
-            BUG_ON((p)->tcph == NULL);              \
-        } else if ((p)->proto == IPPROTO_UDP) {     \
-            BUG_ON((p)->udph == NULL);              \
-        } else if ((p)->proto == IPPROTO_ICMP) {    \
-            BUG_ON((p)->icmpv4h == NULL);           \
-        } else if ((p)->proto == IPPROTO_SCTP) {    \
-            BUG_ON((p)->sctph == NULL);             \
-        } else if ((p)->proto == IPPROTO_ICMPV6) {  \
-            BUG_ON((p)->icmpv6h == NULL);           \
+        if (!((p)->flags & (PKT_IS_FRAGMENT|PKT_IS_INVALID))) {          \
+            if ((p)->proto == IPPROTO_TCP) {            \
+                BUG_ON((p)->tcph == NULL);              \
+            } else if ((p)->proto == IPPROTO_UDP) {     \
+                BUG_ON((p)->udph == NULL);              \
+            } else if ((p)->proto == IPPROTO_ICMP) {    \
+                BUG_ON((p)->icmpv4h == NULL);           \
+            } else if ((p)->proto == IPPROTO_SCTP) {    \
+                BUG_ON((p)->sctph == NULL);             \
+            } else if ((p)->proto == IPPROTO_ICMPV6) {  \
+                BUG_ON((p)->icmpv6h == NULL);           \
+            }                                           \
         }                                           \
         if ((p)->payload_len > 0) {                 \
             BUG_ON((p)->payload == NULL);           \