X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Futils_dns.c;h=25ef18998bb9f62ad928130e49b531f71501f15f;hb=89783745dc59079eab34e0c52de6e5e972f50eb2;hp=a412809fab051c77c718b158b623f813a2cbf49e;hpb=bd66a09b35da21dcb405650ae4587bf2ca811438;p=collectd.git diff --git a/src/utils_dns.c b/src/utils_dns.c index a412809f..25ef1899 100644 --- a/src/utils_dns.c +++ b/src/utils_dns.c @@ -429,13 +429,16 @@ static int handle_ipv6 (struct ip6_hdr *ipv6, int len) { char buf[PCAP_SNAPLEN]; - int offset; + unsigned int offset; int nexthdr; struct in6_addr s_addr; struct in6_addr d_addr; uint16_t payload_len; + if (0 > len) + return (0); + offset = sizeof (struct ip6_hdr); nexthdr = ipv6->ip6_nxt; s_addr = ipv6->ip6_src; @@ -459,7 +462,7 @@ handle_ipv6 (struct ip6_hdr *ipv6, int len) uint16_t ext_hdr_len; /* Catch broken packets */ - if ((offset + sizeof (struct ip6_ext)) > len) + if ((offset + sizeof (struct ip6_ext)) > (unsigned int)len) return (0); /* Cannot handle fragments. */ @@ -479,7 +482,7 @@ handle_ipv6 (struct ip6_hdr *ipv6, int len) } /* while */ /* Catch broken and empty packets */ - if (((offset + payload_len) > len) + if (((offset + payload_len) > (unsigned int)len) || (payload_len == 0) || (payload_len > PCAP_SNAPLEN)) return (0); @@ -620,7 +623,7 @@ handle_linux_sll (const u_char *pkt, int len) } *hdr; uint16_t etype; - if (len < sizeof (struct sll_header)) + if ((0 > len) || ((unsigned int)len < sizeof (struct sll_header))) return (0); hdr = (struct sll_header *) pkt;