diff options
author | dim <dim@FreeBSD.org> | 2015-01-31 20:49:30 +0000 |
---|---|---|
committer | dim <dim@FreeBSD.org> | 2015-01-31 20:49:30 +0000 |
commit | de7d9ba1a12bd2fffbea1f10e14038dfdbf7e5bb (patch) | |
tree | b819b6880c6321c816607340c0c038316ef603c1 /contrib/tcpdump/print-atm.c | |
parent | df65628757d0e5e83d144c151eccd7cc129d160a (diff) | |
download | FreeBSD-src-de7d9ba1a12bd2fffbea1f10e14038dfdbf7e5bb.zip FreeBSD-src-de7d9ba1a12bd2fffbea1f10e14038dfdbf7e5bb.tar.gz |
Merge ^/head r277975 through r277998.
Diffstat (limited to 'contrib/tcpdump/print-atm.c')
-rw-r--r-- | contrib/tcpdump/print-atm.c | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/contrib/tcpdump/print-atm.c b/contrib/tcpdump/print-atm.c index b352579..1676a86 100644 --- a/contrib/tcpdump/print-atm.c +++ b/contrib/tcpdump/print-atm.c @@ -167,7 +167,7 @@ atm_if_print(netdissect_options *ndo, uint32_t llchdr; u_int hdrlen = 0; - if (caplen < 8) { + if (caplen < 1 || length < 1) { ND_PRINT((ndo, "%s", tstr)); return (caplen); } @@ -181,6 +181,15 @@ atm_if_print(netdissect_options *ndo, } /* + * Must have at least a DSAP, an SSAP, and the first byte of the + * control field. + */ + if (caplen < 3 || length < 3) { + ND_PRINT((ndo, "%s", tstr)); + return (caplen); + } + + /* * Extract the presumed LLC header into a variable, for quick * testing. * Then check for a header that's neither a header for a SNAP @@ -207,6 +216,10 @@ atm_if_print(netdissect_options *ndo, * packets? If so, could it be changed to use a * new DLT_IEEE802_6 value if we added it? */ + if (caplen < 20 || length < 20) { + ND_PRINT((ndo, "%s", tstr)); + return (caplen); + } if (ndo->ndo_eflag) ND_PRINT((ndo, "%08x%08x %08x%08x ", EXTRACT_32BITS(p), |