From: guy Date: Wed, 19 Nov 2003 00:35:43 +0000 (+0000) Subject: Have various routines for printing non-final headers for IPv4/IPv6 X-Git-Tag: tcpdump-3.8.1~28 X-Git-Url: https://git.tcpdump.org/tcpdump/commitdiff_plain/df40693df048c2621ede2cdb3c315cb771de034e?ds=sidebyside Have various routines for printing non-final headers for IPv4/IPv6 return -1 if they run out of data. Have the IPv4 and IPv6 dissectors check for non-positive return values from those routines and quit if they see one. --- diff --git a/print-ah.c b/print-ah.c index 6d67cd59..379f8b3c 100644 --- a/print-ah.c +++ b/print-ah.c @@ -23,7 +23,7 @@ #ifndef lint static const char rcsid[] _U_ = - "@(#) $Header: /tcpdump/master/tcpdump/print-ah.c,v 1.19.2.2 2003-11-16 08:51:08 guy Exp $ (LBL)"; + "@(#) $Header: /tcpdump/master/tcpdump/print-ah.c,v 1.19.2.3 2003-11-19 00:35:43 guy Exp $ (LBL)"; #endif #ifdef HAVE_CONFIG_H @@ -67,5 +67,5 @@ ah_print(register const u_char *bp) return sizeof(struct ah) + sumlen; trunc: fputs("[|AH]", stdout); - return 65535; + return -1; } diff --git a/print-esp.c b/print-esp.c index 4e1547cd..8acb286a 100644 --- a/print-esp.c +++ b/print-esp.c @@ -23,7 +23,7 @@ #ifndef lint static const char rcsid[] _U_ = - "@(#) $Header: /tcpdump/master/tcpdump/print-esp.c,v 1.44.2.2 2003-11-16 08:51:19 guy Exp $ (LBL)"; + "@(#) $Header: /tcpdump/master/tcpdump/print-esp.c,v 1.44.2.3 2003-11-19 00:35:43 guy Exp $ (LBL)"; #endif #ifdef HAVE_CONFIG_H @@ -337,7 +337,12 @@ esp_print(const u_char *bp, const u_char *bp2 _U_ #endif , - int *nhdr, int *padlen + int *nhdr +#ifndef HAVE_LIBCRYPTO + _U_ +#endif + , + int *padlen #ifndef HAVE_LIBCRYPTO _U_ #endif @@ -367,7 +372,7 @@ esp_print(const u_char *bp, const u_char *bp2 #ifdef HAVE_LIBCRYPTO secret = NULL; - advance = 0; + padvance = 0; if (!initialized) { esp_init(); @@ -501,7 +506,5 @@ esp_print(const u_char *bp, const u_char *bp2 #endif fail: - if (nhdr) - *nhdr = -1; - return 65536; + return -1; } diff --git a/print-frag6.c b/print-frag6.c index c7c774d9..3f432655 100644 --- a/print-frag6.c +++ b/print-frag6.c @@ -21,7 +21,7 @@ #ifndef lint static const char rcsid[] _U_ = - "@(#) $Header: /tcpdump/master/tcpdump/print-frag6.c,v 1.16.2.2 2003-11-16 08:51:23 guy Exp $"; + "@(#) $Header: /tcpdump/master/tcpdump/print-frag6.c,v 1.16.2.3 2003-11-19 00:35:43 guy Exp $"; #endif #ifdef HAVE_CONFIG_H @@ -71,7 +71,7 @@ frag6_print(register const u_char *bp, register const u_char *bp2) #if 1 /* it is meaningless to decode non-first fragment */ if ((EXTRACT_16BITS(&dp->ip6f_offlg) & IP6F_OFF_MASK) != 0) - return 65535; + return -1; else #endif { @@ -80,7 +80,7 @@ frag6_print(register const u_char *bp, register const u_char *bp2) } trunc: fputs("[|frag]", stdout); - return 65535; + return -1; #undef TCHECK } #endif /* INET6 */ diff --git a/print-ip.c b/print-ip.c index dd427caf..8d9e874f 100644 --- a/print-ip.c +++ b/print-ip.c @@ -21,7 +21,7 @@ #ifndef lint static const char rcsid[] _U_ = - "@(#) $Header: /tcpdump/master/tcpdump/print-ip.c,v 1.128.2.3 2003-11-19 00:17:01 guy Exp $ (LBL)"; + "@(#) $Header: /tcpdump/master/tcpdump/print-ip.c,v 1.128.2.4 2003-11-19 00:35:44 guy Exp $ (LBL)"; #endif #ifdef HAVE_CONFIG_H @@ -478,6 +478,8 @@ again: case IPPROTO_AH: nh = *cp; advance = ah_print(cp); + if (advance <= 0) + break; cp += advance; len -= advance; goto again; @@ -486,10 +488,10 @@ again: { int enh, padlen; advance = esp_print(cp, (const u_char *)ip, &enh, &padlen); + if (advance <= 0) + break; cp += advance; len -= advance + padlen; - if (enh < 0) - break; nh = enh & 0xff; goto again; } @@ -498,10 +500,10 @@ again: { int enh; advance = ipcomp_print(cp, &enh); + if (advance <= 0) + break; cp += advance; len -= advance; - if (enh < 0) - break; nh = enh & 0xff; goto again; } diff --git a/print-ip6.c b/print-ip6.c index d9179160..1916c17f 100644 --- a/print-ip6.c +++ b/print-ip6.c @@ -21,7 +21,7 @@ #ifndef lint static const char rcsid[] _U_ = - "@(#) $Header: /tcpdump/master/tcpdump/print-ip6.c,v 1.32.2.3 2003-11-19 00:17:02 guy Exp $"; + "@(#) $Header: /tcpdump/master/tcpdump/print-ip6.c,v 1.32.2.4 2003-11-19 00:35:44 guy Exp $"; #endif #ifdef HAVE_CONFIG_H @@ -81,7 +81,7 @@ ip6_print(register const u_char *bp, register u_int length) cp = (const u_char *)ip6; advance = sizeof(struct ip6_hdr); nh = ip6->ip6_nxt; - while (cp < snapend) { + while (cp < snapend && advance > 0) { cp += advance; len -= advance; @@ -144,8 +144,6 @@ ip6_print(register const u_char *bp, register u_int length) { int enh, padlen; advance = esp_print(cp, (const u_char *)ip6, &enh, &padlen); - if (enh < 0) - goto end; nh = enh & 0xff; len -= padlen; break; @@ -154,8 +152,6 @@ ip6_print(register const u_char *bp, register u_int length) { int enh; advance = ipcomp_print(cp, &enh); - if (enh < 0) - goto end; nh = enh & 0xff; break; } diff --git a/print-ip6opts.c b/print-ip6opts.c index bf43fe0c..9047e8dc 100644 --- a/print-ip6opts.c +++ b/print-ip6opts.c @@ -33,7 +33,7 @@ #ifndef lint static const char rcsid[] _U_ = - "@(#) $Header: /tcpdump/master/tcpdump/print-ip6opts.c,v 1.14.2.2 2003-11-16 08:51:27 guy Exp $"; + "@(#) $Header: /tcpdump/master/tcpdump/print-ip6opts.c,v 1.14.2.3 2003-11-19 00:35:44 guy Exp $"; #endif #ifdef INET6 @@ -305,7 +305,7 @@ hbhopt_print(register const u_char *bp) trunc: fputs("[|HBH]", stdout); - return(hbhlen); + return(-1); } int @@ -330,6 +330,6 @@ dstopt_print(register const u_char *bp) trunc: fputs("[|DSTOPT]", stdout); - return(dstoptlen); + return(-1); } #endif /* INET6 */ diff --git a/print-ipcomp.c b/print-ipcomp.c index b1f611b3..1f1c23a6 100644 --- a/print-ipcomp.c +++ b/print-ipcomp.c @@ -21,7 +21,7 @@ #ifndef lint static const char rcsid[] _U_ = - "@(#) $Header: /tcpdump/master/tcpdump/print-ipcomp.c,v 1.17.2.2 2003-11-16 08:51:27 guy Exp $"; + "@(#) $Header: /tcpdump/master/tcpdump/print-ipcomp.c,v 1.17.2.3 2003-11-19 00:35:45 guy Exp $"; #endif #ifdef HAVE_CONFIG_H @@ -48,7 +48,7 @@ struct ipcomp { #include "extract.h" int -ipcomp_print(register const u_char *bp, int *nhdr) +ipcomp_print(register const u_char *bp, int *nhdr _U_) { register const struct ipcomp *ipcomp; register const u_char *ep; @@ -87,7 +87,5 @@ ipcomp_print(register const u_char *bp, int *nhdr) #endif fail: - if (nhdr) - *nhdr = -1; - return 65536; + return -1; } diff --git a/print-rt6.c b/print-rt6.c index 19026d4d..ce14f74c 100644 --- a/print-rt6.c +++ b/print-rt6.c @@ -21,7 +21,7 @@ #ifndef lint static const char rcsid[] _U_ = - "@(#) $Header: /tcpdump/master/tcpdump/print-rt6.c,v 1.23.2.2 2003-11-16 08:51:43 guy Exp $"; + "@(#) $Header: /tcpdump/master/tcpdump/print-rt6.c,v 1.23.2.3 2003-11-19 00:35:45 guy Exp $"; #endif #ifdef HAVE_CONFIG_H @@ -102,6 +102,6 @@ rt6_print(register const u_char *bp, register const u_char *bp2) trunc: fputs("[|srcrt]", stdout); - return 65535; /* XXX */ + return -1; } #endif /* INET6 */