summaryrefslogtreecommitdiff
path: root/print-token.c
diff options
context:
space:
mode:
authorGuy Harris <guy@alum.mit.edu>2010-02-21 11:29:46 -0800
committerGuy Harris <guy@alum.mit.edu>2010-02-21 11:29:46 -0800
commitf99863c5be7e7b32757e5012af87b17f601b4459 (patch)
treec36c784851fd4ca91e8b4cbc6a834dd74f82abc1 /print-token.c
parent623e4271b0464e7d17f3626f6387a70cd103a748 (diff)
downloadtcpdump-f99863c5be7e7b32757e5012af87b17f601b4459.tar.gz
Add some bounds checks for the source routing information.
Diffstat (limited to 'print-token.c')
-rw-r--r--print-token.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/print-token.c b/print-token.c
index 6a1b95da..4f8422b5 100644
--- a/print-token.c
+++ b/print-token.c
@@ -127,7 +127,16 @@ token_print(const u_char *p, u_int length, u_int caplen)
if (eflag)
token_hdr_print(trp, length, ESRC(&ehdr), EDST(&ehdr));
+ if (caplen < TOKEN_HDRLEN + 2) {
+ printf("[|token-ring]");
+ return hdr_len;
+ }
route_len = RIF_LENGTH(trp);
+ hdr_len += route_len;
+ if (caplen < hdr_len) {
+ printf("[|token-ring]");
+ return hdr_len;
+ }
if (vflag) {
printf("%s ", broadcast_indicator[BROADCAST(trp)]);
printf("%s", direction[DIRECTION(trp)]);
@@ -148,7 +157,6 @@ token_print(const u_char *p, u_int length, u_int caplen)
}
/* Skip over token ring MAC header and routing information */
- hdr_len += route_len;
length -= hdr_len;
p += hdr_len;
caplen -= hdr_len;