From 43aa74d711eb774053e3fd85a9705638a49eaf60 Mon Sep 17 00:00:00 2001 From: Victor Julien Date: Sat, 8 Feb 2014 10:35:47 +0100 Subject: [PATCH] debug-validation: fix packet check On fragments and invalid packets we can have p->proto set, while the matching protocol header pointer is null. --- src/util-validate.h | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/src/util-validate.h b/src/util-validate.h index b26bab6175..b5c3da26b2 100644 --- a/src/util-validate.h +++ b/src/util-validate.h @@ -73,16 +73,18 @@ 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); \