diff options
author | guy <guy> | 2003-11-19 00:36:06 +0000 |
---|---|---|
committer | guy <guy> | 2003-11-19 00:36:06 +0000 |
commit | 988cd2bb0e8d368505897ffeabc30cfafcf1b449 (patch) | |
tree | d7c8bc13d6f5594c2c62d5b50f14fc99b4683171 | |
parent | fe0fcd92e3ae841f7ccf84b250df1ec4afdaecbc (diff) | |
download | tcpdump-988cd2bb0e8d368505897ffeabc30cfafcf1b449.tar.gz |
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.
-rw-r--r-- | print-ah.c | 4 | ||||
-rw-r--r-- | print-esp.c | 15 | ||||
-rw-r--r-- | print-frag6.c | 6 | ||||
-rw-r--r-- | print-ip.c | 12 | ||||
-rw-r--r-- | print-ip6.c | 8 | ||||
-rw-r--r-- | print-ip6opts.c | 6 | ||||
-rw-r--r-- | print-ipcomp.c | 8 | ||||
-rw-r--r-- | print-rt6.c | 4 |
8 files changed, 31 insertions, 32 deletions
@@ -23,7 +23,7 @@ #ifndef lint static const char rcsid[] _U_ = - "@(#) $Header: /tcpdump/master/tcpdump/print-ah.c,v 1.21 2003-11-16 09:36:11 guy Exp $ (LBL)"; + "@(#) $Header: /tcpdump/master/tcpdump/print-ah.c,v 1.22 2003-11-19 00:36:06 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 6741e48a..630b9603 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.46 2003-11-16 09:36:20 guy Exp $ (LBL)"; + "@(#) $Header: /tcpdump/master/tcpdump/print-esp.c,v 1.47 2003-11-19 00:36:07 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 9153a9b1..11e884b7 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.18 2003-11-16 09:36:21 guy Exp $"; + "@(#) $Header: /tcpdump/master/tcpdump/print-frag6.c,v 1.19 2003-11-19 00:36:07 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 */ @@ -21,7 +21,7 @@ #ifndef lint static const char rcsid[] _U_ = - "@(#) $Header: /tcpdump/master/tcpdump/print-ip.c,v 1.131 2003-11-19 00:17:32 guy Exp $ (LBL)"; + "@(#) $Header: /tcpdump/master/tcpdump/print-ip.c,v 1.132 2003-11-19 00:36:07 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 adfd8008..a5660933 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.35 2003-11-19 00:17:32 guy Exp $"; + "@(#) $Header: /tcpdump/master/tcpdump/print-ip6.c,v 1.36 2003-11-19 00:36:07 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 759ff429..a5da63df 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.16 2003-11-16 09:36:24 guy Exp $"; + "@(#) $Header: /tcpdump/master/tcpdump/print-ip6opts.c,v 1.17 2003-11-19 00:36:08 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 89bcac70..89130a37 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.19 2003-11-16 09:36:24 guy Exp $"; + "@(#) $Header: /tcpdump/master/tcpdump/print-ipcomp.c,v 1.20 2003-11-19 00:36:08 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 063d5cd6..822ae7cc 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.25 2003-11-16 09:36:35 guy Exp $"; + "@(#) $Header: /tcpdump/master/tcpdump/print-rt6.c,v 1.26 2003-11-19 00:36:08 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 */ |