summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorguy <guy>2003-11-19 00:36:06 +0000
committerguy <guy>2003-11-19 00:36:06 +0000
commit988cd2bb0e8d368505897ffeabc30cfafcf1b449 (patch)
treed7c8bc13d6f5594c2c62d5b50f14fc99b4683171
parentfe0fcd92e3ae841f7ccf84b250df1ec4afdaecbc (diff)
downloadtcpdump-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.c4
-rw-r--r--print-esp.c15
-rw-r--r--print-frag6.c6
-rw-r--r--print-ip.c12
-rw-r--r--print-ip6.c8
-rw-r--r--print-ip6opts.c6
-rw-r--r--print-ipcomp.c8
-rw-r--r--print-rt6.c4
8 files changed, 31 insertions, 32 deletions
diff --git a/print-ah.c b/print-ah.c
index 6a57acf4..ecd106b7 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.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 */
diff --git a/print-ip.c b/print-ip.c
index 3be2a688..f4267222 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.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 */