5 years agoChange the version to 4.9.0. tcpdump-4.9.0
Denis Ovsienko [Wed, 18 Jan 2017 18:38:20 +0000 (18:38 +0000)] 
Change the version to 4.9.0.

5 years agoCVE-2016-7985,7986/fixup medsa_print() tcpdump-4.9.0-bp
Denis Ovsienko [Wed, 18 Jan 2017 18:01:52 +0000 (18:01 +0000)] 
CVE-2016-7985,7986/fixup medsa_print()

The code in medsa_print() assumed that the MEDSA packet always follows
an Ethernet header that is inside the allocated memory buffer. But
this is not always the case, see commit 6bc4429 for rationale.

Eliminate the Ethernet header pointer and just pass on the struct
lladdr_info arguments provided.

5 years agoAdd changes for 4.9.0 release
Francois-Xavier Le Bail [Wed, 18 Jan 2017 09:55:25 +0000 (10:55 +0100)] 
Add changes for 4.9.0 release

5 years agoUse INT32_MIN to check for the smallest possible 32-bit signed value.
Guy Harris [Tue, 17 Jan 2017 23:25:35 +0000 (15:25 -0800)] 
Use INT32_MIN to check for the smallest possible 32-bit signed value.

-2147483648 provokes warnings, for various reasons involving the
definition of a constant in C, the rules of picking the type of a
constant, and the rules for determining the type of an expression
involving an integral value and the - operator.  (Note that
-2147483648isn't a decimal-constant in C90 or C99, as a decimal-constant
can't contain a -.  Therefore, it's a constant expression, consisting of
the - operator applied to the constant 2147483648.)

So we use INT32_MIN, which should at least make an effort to avoid those

5 years agoThe option -n is useless in TESTLIST
Francois-Xavier Le Bail [Tue, 17 Jan 2017 15:05:30 +0000 (16:05 +0100)] 
The option -n is useless in TESTLIST

This option is already set in TESTonce.

5 years agoDiscard result of fn_printn() calls.
Guy Harris [Tue, 17 Jan 2017 09:01:46 +0000 (01:01 -0800)] 
Discard result of fn_printn() calls.

We've already done checks to see whether we'll run past the end of the
packet, so there's no need to see whether fn_printn() did so.

Squelches some Coverity complaints.

5 years agoCVE-2017-5205/add a test case
Denis Ovsienko [Mon, 16 Jan 2017 11:19:00 +0000 (11:19 +0000)] 
CVE-2017-5205/add a test case

The .pcap file comes from Francois-Xavier Le Bail.

5 years agoCVE-2017-5205/Clean up parsing of IKEv2 Security Associations.
Guy Harris [Sun, 15 Jan 2017 21:49:26 +0000 (13:49 -0800)] 
CVE-2017-5205/Clean up parsing of IKEv2 Security Associations.

The payload of a Security Association has a sequence of proposal
substructures; the Last Substruc field should only be 0 (for the last
proposal substructure) or 2 (if there's another proposal substructure
after the current one).  If it's neither, don't try to dissect the next
item as a payload with the Last Substruc field's value as a payload

The payload of a proposal substructure has a sequence of transform
substructures; the Last Substruc field should only be 0 (for the last
transform substructure) or 3 (if there's another transform substructure
after the current one).  If it's neither, don't try to dissect the next
item as a payload with the Last Substruc field's value as a payload

That keeps us from trying to, for example, dissect a bogus substructure
as an encrypted payload item and passing a null pointer as the struct
isakmp structure pointer.

Do more checks while we're at it.

5 years agoUse ND_TCHECK_32BITS() before EXTRACT_32BITS().
Guy Harris [Sun, 15 Jan 2017 18:42:29 +0000 (10:42 -0800)] 

It makes it a bit clearer what's being done.

5 years agoCVE-2017-5485/add the test case
Denis Ovsienko [Sun, 15 Jan 2017 13:50:17 +0000 (13:50 +0000)] 
CVE-2017-5485/add the test case

5 years agoCVE-2017-5486/add the test case
Denis Ovsienko [Sun, 15 Jan 2017 13:35:33 +0000 (13:35 +0000)] 
CVE-2017-5486/add the test case

5 years agoClean up white space.
Guy Harris [Sat, 14 Jan 2017 21:12:04 +0000 (13:12 -0800)] 
Clean up white space.

5 years agoMake sure we have the entire option before printing it.
Guy Harris [Sat, 14 Jan 2017 10:04:20 +0000 (02:04 -0800)] 
Make sure we have the entire option before printing it.

5 years agoUse fn_printn() to print strings.
Guy Harris [Sat, 14 Jan 2017 10:02:03 +0000 (02:02 -0800)] 
Use fn_printn() to print strings.

Don't just use %.*s - that's not robust in the presence of non-printable
characters in the string.

5 years agoCVE-2017-5485/Fix lookup_nsap() to match what isonsap_string() expects.
Guy Harris [Sat, 14 Jan 2017 03:38:41 +0000 (19:38 -0800)] 
CVE-2017-5485/Fix lookup_nsap() to match what isonsap_string() expects.

Change cddcb5632decb3fc631407b2ce0e526d17bb8ff9 changed isonsap_string()
to take, as arguments, a pointer to the first octet of an NSAP and the
length of the NSAP, rather than a pointer to a string of octets the
first octet of which is the NSAP length and the subsequent octets are
the octets of the NSAP.

However, lookup_nsap() was not changed in a similar fashion, and
isonsap_string() handed it a pointer to the first octet of the NSAP,
which lookup_nsap() treated as the NSAP length.

This should fix GitHub issue #563.

5 years agoCVE-2017-5486/Do ND_TCHECK2 bounds checks on source and destination addresses.
Guy Harris [Sat, 14 Jan 2017 02:00:46 +0000 (18:00 -0800)] 
CVE-2017-5486/Do ND_TCHECK2 bounds checks on source and destination addresses.

Those are needed in addition to the checks against li.

This should fix GitHub issue #562.  I suspect issue #563 is a separate

Tweak length check messages to be more like the IS-IS ones, and fix both
to print unsigned values with %u, while we're at it.

5 years agoCVE-2017-5484/ATM: fix an incorrect bounds check
Denis Ovsienko [Sat, 14 Jan 2017 00:20:47 +0000 (00:20 +0000)] 
CVE-2017-5484/ATM: fix an incorrect bounds check

The function sig_print() did receive a correct caplen parameter value
but didn't use it correctly and could overread by one byte as Brian
Carpenter has demonstrated. Fix it by switching to the standard macros.

5 years agoAdd more checks.
Guy Harris [Thu, 12 Jan 2017 21:14:42 +0000 (13:14 -0800)] 
Add more checks.

Check that the destination and source addresses are present before
printing them.

Check the length value from the length indiator as we dissect the CLNS
header.  Make sure that header doesn't go past the on-the-network length
of the packet.

Check to make sure an option's content doesn't go past the length of the

Also, don't print the body of an unknown option type twice with -vv and

5 years agoCVE-2017-5483/SNMP: improve ASN.1 bounds checks
Denis Ovsienko [Thu, 12 Jan 2017 13:47:50 +0000 (13:47 +0000)] 
CVE-2017-5483/SNMP: improve ASN.1 bounds checks

Kamil Frankowicz had found that truncated BE_STR and BE_SEQ ASN.1
elements could lead to an overread, from the source code it looked like
other ids could have this problem too. Move the checks introduced in
commit 72e501f out of the switch blocks to cover all ids by default.
This fixes GH#559 and GH#566.

5 years agoCVE-2017-5482/Q.933: add a missing bounds check
Denis Ovsienko [Thu, 12 Jan 2017 10:09:34 +0000 (10:09 +0000)] 
CVE-2017-5482/Q.933: add a missing bounds check

Brian Carpenter had found that regardless of CVE-2016-8575 q933_print()
still could overread the buffer trying to parse a short packet. This
change fixes the problem.

5 years agopass correct caplen to other functions as well
Denis Ovsienko [Wed, 11 Jan 2017 12:54:45 +0000 (12:54 +0000)] 
pass correct caplen to other functions as well

In ethertype_print(), isoclns_print() and snap_print() adjust the length
arithmetics along the same lines as for ether_print() in the previous
commit. Where done, the current pointer is not greater than snapend so
that the difference (i.e. caplen) is never negative.

This does not fix a reported issue but the problem was very likely to be

5 years agoCVE-2017-5342/pass correct caplen value to ether_print()
Denis Ovsienko [Tue, 10 Jan 2017 14:12:14 +0000 (14:12 +0000)] 
CVE-2017-5342/pass correct caplen value to ether_print()

In that function the "length" parameter means off-the-wire length, that
is, the length declared inside the outer header. The "caplen" parameter
means the amount of bytes actually available in the captured packet.

gre_print_0() and the functions modelled after it passed the value of
"length" instead of the value of "caplen", this could make ether_print()
access beyond the memory allocated for the captured packet. Brian
Carpenter had demonstrated this for the OTV case.

Fix the involved functions that call ether_print() to pass the correct
value and leave a comment to dismiss "caplen" later as its value can be
reliably derived from the other ether_print() parameters.

5 years agoCVE-2017-5341/OTV: add missing bounds checks
Denis Ovsienko [Tue, 10 Jan 2017 10:39:35 +0000 (10:39 +0000)] 
CVE-2017-5341/OTV: add missing bounds checks

Interleave the bounds checking with printing to make it visible which
last protocol field was OK. This fixes a vulnerability discovered by
Brian Carpenter.

5 years agoCVE-2017-5204/IPv6: fix header printing
Denis Ovsienko [Mon, 9 Jan 2017 01:01:46 +0000 (01:01 +0000)] 
CVE-2017-5204/IPv6: fix header printing

Add a few checks to ip6_print() to make it stop decoding the IPv6
headers immediately when the header-specific functions signal an error
condition. Without this it tried to fetch the next header selector for
the next round regardless and could run outside of the allocated packet
space on a specially crafted IPv6 packet.

Brian Carpenter has demonstrated this for the Hop-by-Hop Options header.
Fix that specific case and also the Destination Options and Fragment
header processing as those use the same logic.

5 years agoCVE-2017-5202/ISOCLNS: Add two bounds checks
Francois-Xavier Le Bail [Fri, 23 Dec 2016 21:11:18 +0000 (22:11 +0100)] 
CVE-2017-5202/ISOCLNS: Add two bounds checks

This fix GitHub issue #558

5 years agoCVE-2017-5203/BOOTP: Add a bounds check
Francois-Xavier Le Bail [Fri, 23 Dec 2016 20:53:26 +0000 (21:53 +0100)] 
CVE-2017-5203/BOOTP: Add a bounds check

This fix GitHub issue #557

5 years agoTCP: put TCP-AO option decoding right
Denis Ovsienko [Tue, 1 Nov 2016 17:05:01 +0000 (17:05 +0000)] 
TCP: put TCP-AO option decoding right

As it was correctly pointed out in GitHub issue #516, the TCPOPT_TCPAO
(formerly TCPOPT_AUTH) case had an issue with option length processing,
though without significant consequences thanks to a check elsewhere.
Besides that, the old code (introduced in 2005) decoded a structure
similar to a proposed encoding variant of the early (first published in
2007) revisions of the Internet-Draft but different from the encoding
of RFC 5925 (published in 2010). These issues are now addressed and the
TCP option renamed to TCP-AO.

5 years agoamend the TCP authentication test case
Denis Ovsienko [Tue, 8 Nov 2016 00:55:49 +0000 (00:55 +0000)] 
amend the TCP authentication test case

Edit the .pcap file to change the TCP option kind from 20 to 29 to
match the changes done to the decoder. Now the code flow and hence
the text output are back to how they were before that change.

5 years agoTCP: add a test case for the previous commit
Denis Ovsienko [Tue, 1 Nov 2016 15:16:11 +0000 (15:16 +0000)] 
TCP: add a test case for the previous commit

The SCPS TCP option is malformed as discussed in GitHub issue #516 and
is printed as such. The .pcap file was contributed by Patrik Lundquist.

5 years agoCorrect TCP option Kind value for TCP Auth and add SCPS-TP.
Patrik Lundquist [Thu, 5 May 2016 19:31:01 +0000 (21:31 +0200)] 
Correct TCP option Kind value for TCP Auth and add SCPS-TP.

Fixes first problem in issue #516 while the second one isn't broken in tcpdump.

5 years agoClean up the "have libsmi but no modules loaded" case.
Guy Harris [Fri, 28 Oct 2016 19:26:48 +0000 (12:26 -0700)] 
Clean up the "have libsmi but no modules loaded" case.

Have asn1_print() print out OIDs regardless of whether we have any
modules loaded or not.

Have smi_decode_oid decode the OID to an array of unsigned ints
regardless of whether we have any modules loaded or not.

Have smi_print_variable() just use asn1_print() to print the OID of a
variable binding if we don't have any modules loaded; in that case,
we're not going to try to look the OID up with libsmi, so we don't need
a decoded version.

Have smi_print_value() not bother decoding the OID or looking the OID up
if we don't have any modules loaded; also, if we *do* have modules
loaded, check whether smi_decode_oid() succeeds.

5 years agoDo better checking of RESP packets.
Guy Harris [Thu, 27 Oct 2016 19:22:54 +0000 (12:22 -0700)] 
Do better checking of RESP packets.

Don't call strtol() on the contents of a packet; there is *no* guarantee
that it won't run past the end of the buffer, as the buffer isn't a
null-terminated string.  Instead, have our own routine to parse ASCII
numbers (based on the FreeBSD strtol()), which uses ND_TCHECK() and
checks against the on-the-wire length to ensure it doesn't go past the
end of the packet or the end of the captured data.  Have it check for
other errors as well, such as checking for negative lengths that aren't

Clean up other aspects of the packet parsing.  Have them check the
on-the-wire length as well as the captured length.

Update the results of the resp_3 test.

5 years agoClean up the object abbreviation list.
Guy Harris [Sun, 23 Oct 2016 05:02:54 +0000 (22:02 -0700)] 
Clean up the object abbreviation list.

Have the OID prefixes be arrays of uint8_t, and put the size of the
array into the list, rather than having them be "strings" and et the
length with strlen().

Have a macro to encapsulate X.690 section 8.19.4's rules for the first
octet of an OID value, and use it; that makes the components of the OID

Also, if the prefix is longer than the remaining data in the OID - or
the remaining captured data - just skip it, don't treat that as an

5 years agoJust handle COUNTER64 as a u_int64.
Guy Harris [Sun, 23 Oct 2016 02:37:42 +0000 (19:37 -0700)] 
Just handle COUNTER64 as a u_int64.

No need to worry about 64-bit integers any more - we require compiler
and printf support for them.

5 years agoMore bounds and length checks.
Guy Harris [Sun, 23 Oct 2016 02:33:43 +0000 (19:33 -0700)] 
More bounds and length checks.

Catch INTEGER values with a length of 0, so we don't fetch a byte that
doesn't belong to the value.

Fix what appears to be a long-standing bug in the OID prefix matching
code, wherein the length of the *first* prefix in the table is used as
the length of *all* prefixes, and add some packet-length checking to
that list.

Report packets with an invalid SNMP version number as being SNMP, so
we at least indicate *that*.

5 years agoUpdate the test results.
Guy Harris [Sun, 23 Oct 2016 00:16:00 +0000 (17:16 -0700)] 
Update the test results.

The output is different with some recent changes.

5 years agoFix bounds checks.
Guy Harris [Thu, 20 Oct 2016 01:18:58 +0000 (18:18 -0700)] 
Fix bounds checks.

At the beginning, make sure the on-the-wire length is >= the size of the
EGP header, and make sure the captured data is >= the size of the EGP
header, rather than making sure we have all the captured data, as we're
only looking at the header there.

Do on-the-wire length checking in egpnrprint().

5 years agoRedo TLV bounds checking.
Guy Harris [Wed, 19 Oct 2016 23:44:25 +0000 (16:44 -0700)] 
Redo TLV bounds checking.

If the L of the V of the TLV isn't large enough for everything it's
supposed to contain, just quit processing the TLV, print its contents in
hex, and process the next TLV.

5 years agoMake sure the Opaque_Handle string is null-terminated.
Guy Harris [Wed, 19 Oct 2016 01:33:12 +0000 (18:33 -0700)] 
Make sure the Opaque_Handle string is null-terminated.

...even if the file handle length is 0.

5 years agoFixes to match the IEEE standard, and additional bounds and length checks.
Guy Harris [Wed, 19 Oct 2016 00:59:11 +0000 (17:59 -0700)] 
Fixes to match the IEEE standard, and additional bounds and length checks.

Fix a lot of the dissection to match what 802.1ag-2007 says.

Add a bunch of bounds and length checks.

5 years agoFix bugs, add checks.
Guy Harris [Tue, 18 Oct 2016 02:58:28 +0000 (19:58 -0700)] 
Fix bugs, add checks.

Add multiple bounds and length checks to make sure we don't run past the
end of the packet.

Don't check the length of "end of TLV" indicators; 802.3 says it should
be ignored.

The Event Notification OAMPDU has a sequence number; report it.

5 years agoUpdates for RFC 4379, bug fixes, and additional bounds checks.
Guy Harris [Sun, 16 Oct 2016 04:41:31 +0000 (21:41 -0700)] 
Updates for RFC 4379, bug fixes, and additional bounds checks.

print-lspping.c was written to one of the draft-ietf-mpls-lsp-ping-13
drafts; incorporate subsequent changes that are in RFC 4379.  Not all
LV and subTLV types from that RFC are currently dissected.

Apparently, the IANA has two separate but similar registries, the BGP
Layer 2 Encapsulation Types registry and the MPLS Pseudowire Types
registry.  Have two separate tables for them, and use the tables as
appropriate.  Update them to match the current state of the registries.

11 is not the subTLV code for "BGP labeled IPv4 prefix" (and never was,
from what I can tell from looking at the I-Ds), 12 is.

Do more bounds checking.

5 years agoSNMP: Add some bounds checks
Francois-Xavier Le Bail [Fri, 7 Oct 2016 16:08:42 +0000 (18:08 +0200)] 
SNMP: Add some bounds checks

5 years agoAdd a bounds check.
Guy Harris [Thu, 6 Oct 2016 07:11:56 +0000 (00:11 -0700)] 
Add a bounds check.

The bounds check for the Hello packet options was missing.

5 years agoDo bounds checks on NBNS resource types and resource data lengths.
Guy Harris [Thu, 6 Oct 2016 02:43:27 +0000 (19:43 -0700)] 
Do bounds checks on NBNS resource types and resource data lengths.

5 years agoFix some if statements missing brackets.
Guy Harris [Wed, 5 Oct 2016 22:30:16 +0000 (15:30 -0700)] 
Fix some if statements missing brackets.

5 years agoBefore fetching the flags2 field, make sure we have it.
Guy Harris [Wed, 5 Oct 2016 19:21:28 +0000 (12:21 -0700)] 
Before fetching the flags2 field, make sure we have it.

Also, don't fetch it until we need it, so we can do a little more
dissection before reporting a truncated packet.

5 years agoDo bounds checks when printing character and octet strings.
Guy Harris [Wed, 5 Oct 2016 03:38:53 +0000 (20:38 -0700)] 
Do bounds checks when printing character and octet strings.

Pull the code in asn1_print() to print octet sequences and (presumed)
printable strings into routines of their own, and use them when we're
printing them outside asn1_print().

That fixes some cases where we can run past the end of the packet

5 years agoAdd a test file for a previous fix
Francois-Xavier Le Bail [Mon, 26 Sep 2016 09:22:11 +0000 (11:22 +0200)] 
Add a test file for a previous fix

Fix was: "Don't overflow the Opaque_Handle buffer."

5 years agoDo length checking for the key ID of the enhanced auth option.
Guy Harris [Mon, 26 Sep 2016 00:48:21 +0000 (17:48 -0700)] 
Do length checking for the key ID of the enhanced auth option.

5 years agoDon't overflow the Opaque_Handle buffer.
Guy Harris [Sun, 25 Sep 2016 21:17:00 +0000 (14:17 -0700)] 
Don't overflow the Opaque_Handle buffer.

The file handle length can be arbitrarily large; don't assume its hex
dump will fit in the buffer, just truncate it if it doesn't.

5 years agoAdjust for fix to TCP option printout.
Guy Harris [Sun, 25 Sep 2016 04:21:08 +0000 (21:21 -0700)] 
Adjust for fix to TCP option printout.

5 years agoDon't run past the end of an NFSv3 file handle.
Guy Harris [Sun, 25 Sep 2016 03:39:52 +0000 (20:39 -0700)] 
Don't run past the end of an NFSv3 file handle.

NFSv2 file handles are always 32 bytes long, possibly with zero padding
at the end.

NFSv3 file handles are variable-length, however, so we cannot assume
that they have any minimum number of bytes of data; check that bytes
are present before looking at them.

5 years agoTests for Frame Relay problems.
Guy Harris [Sat, 24 Sep 2016 22:05:03 +0000 (15:05 -0700)] 
Tests for Frame Relay problems.

The problems were found by Hanno Böck with American Fuzzy Lop.

5 years agoIGMP: Add a length check
Francois-Xavier Le Bail [Tue, 12 Jul 2016 19:21:26 +0000 (21:21 +0200)] 
IGMP: Add a length check

5 years agoFix indentation in "make check" output
Francois-Xavier Le Bail [Sun, 17 Jul 2016 10:20:29 +0000 (12:20 +0200)] 
Fix indentation in "make check" output

5 years agoISOCLNS: Manage a test as GCC-specific
Francois-Xavier Le Bail [Sat, 16 Jul 2016 15:14:53 +0000 (17:14 +0200)] 
ISOCLNS: Manage a test as GCC-specific

5 years agoUpdate a test output for a previous fix
Francois-Xavier Le Bail [Sat, 16 Jul 2016 08:30:06 +0000 (10:30 +0200)] 
Update a test output for a previous fix

Fix was: "RSVP: Add bounds and length checks"
(commit 2bdecbfb109a890f0b941085cf5a354d58893f3f)

5 years agoConsistently use 4, rather than a sizeof, as the size of an IPv4 address.
Guy Harris [Tue, 22 Dec 2015 19:45:52 +0000 (11:45 -0800)] 
Consistently use 4, rather than a sizeof, as the size of an IPv4 address.

5 years agoAdd a test file for a previous fix
Francois-Xavier Le Bail [Wed, 9 Dec 2015 16:30:35 +0000 (17:30 +0100)] 
Add a test file for a previous fix

Fix was: "OSPF: Fix a segmentation fault"
(commit 046f10da386cce5ecbb36d140785cf08669fc1d6)

5 years agoAdd a test file for a previous fix
Francois-Xavier Le Bail [Fri, 20 Nov 2015 20:28:21 +0000 (21:28 +0100)] 
Add a test file for a previous fix

Fix was: "UDLD: Fix an infinite loop"
(commit 9759a5bc71a30159479f85a2d8aceb1f348ef818)

5 years agoCVE-2016-7934,7935,7937/RTP: Fix two segmentation faults
Francois-Xavier Le Bail [Tue, 17 Nov 2015 16:12:22 +0000 (17:12 +0100)] 
CVE-2016-7934,7935,7937/RTP: Fix two segmentation faults

Add two test files for these fixes.
Add more bounds checks in VAT, RTP and RTCP printers.

Add and use *_tstr[] strings.
Update the output of a test accordingly.
Remove spaces before tabs.

5 years agoCVE-2016-7922/AH: Add a bounds check
Francois-Xavier Le Bail [Thu, 26 Nov 2015 20:40:18 +0000 (21:40 +0100)] 
CVE-2016-7922/AH: Add a bounds check

Fix a warning (unused variable 'ep').

5 years agoAdd a test file for the previous fix
Francois-Xavier Le Bail [Thu, 26 Nov 2015 20:38:38 +0000 (21:38 +0100)] 
Add a test file for the previous fix

5 years agoCVE-2016-7938/ZeroMQ: fix an infinite loop
Denis Ovsienko [Sat, 31 Oct 2015 22:40:33 +0000 (22:40 +0000)] 
CVE-2016-7938/ZeroMQ: fix an infinite loop

This issue was discovered through fuzzing by Francois-Xavier Le Bail.

5 years agoSTP: Remove trailing spaces in output
Francois-Xavier Le Bail [Mon, 16 Nov 2015 15:49:09 +0000 (16:49 +0100)] 
STP: Remove trailing spaces in output

5 years agoSTP: Filter out non-printable characters
Francois-Xavier Le Bail [Wed, 11 Nov 2015 13:31:29 +0000 (14:31 +0100)] 
STP: Filter out non-printable characters

Use fn_printzp().

Add a missing comma in output.
Use ND_TCHECK_32BITS instead of ND_TTEST_32BITS.
Add a test for spb_bpduv4.pcap with verbose output.

5 years agoAdd a test file for a previous fix
Francois-Xavier Le Bail [Thu, 5 Nov 2015 10:34:49 +0000 (11:34 +0100)] 
Add a test file for a previous fix

Fix was: "ISOCLNS: Fix a segmentation fault"
(commit be8e9c9deab085cbd32dc6fcfa400c483179ed7e)

5 years agoAdd test files for a previous fix
Francois-Xavier Le Bail [Thu, 5 Nov 2015 10:13:46 +0000 (11:13 +0100)] 
Add test files for a previous fix

Fix was: "ISOCLNS: Fix two segmentation faults"
(commit 8db57a4b904cf3f7eeb6e4ad66dae6dd8c9cd115)

group together IS-IS tests.
Fix typos.

5 years agoFix the interface capture length of some fuzzed pcap files
Francois-Xavier Le Bail [Sat, 24 Oct 2015 20:14:37 +0000 (22:14 +0200)] 
Fix the interface capture length of some fuzzed pcap files

They will be always usable with the new interface capture length sanity
(old length: 808464432, new length: 262144)

5 years agoFix the file capture length of a fuzzed pcap file
Francois-Xavier Le Bail [Mon, 19 Oct 2015 21:30:39 +0000 (23:30 +0200)] 
Fix the file capture length of a fuzzed pcap file

It will be always usable with the new file capture length sanity check.
(old length: 808464432, new length: 262144)

5 years agoAdd test file for a previous fix
Francois-Xavier Le Bail [Sat, 24 Oct 2015 12:04:58 +0000 (14:04 +0200)] 
Add test file for a previous fix

Fix was: "RSVP: Fix an infinite loop"
(commit d7d269e8c67b6e8262db27bb92ae524aa3c3f439)

5 years agoFix the pcap version in some tests/ fuzzed pcap files
Francois-Xavier Le Bail [Sat, 10 Oct 2015 13:31:02 +0000 (15:31 +0200)] 
Fix the pcap version in some tests/ fuzzed pcap files

They will be always usable with the upcoming libpcap versions sanity checks.
pcap: old version: 12336.12336, new version: 2.4
pcap-ng: old version: 1.12336, new version: 1.0

5 years agoFix a trailing tab
Francois-Xavier Le Bail [Mon, 5 Oct 2015 12:48:20 +0000 (14:48 +0200)] 
Fix a trailing tab

5 years agoClean up signed_relts_print() some more.
Guy Harris [Sun, 9 Aug 2015 18:04:53 +0000 (11:04 -0700)] 
Clean up signed_relts_print() some more.

If it's not < 0, it's not -2147483648; check for negative values first.

Don't calculate the value for -2147483648 by hand, print a - and then
have unsigned_relts_print() calculate the value for 2147483648.

5 years agoGet rid of some duplicated code.
Guy Harris [Sat, 8 Aug 2015 20:13:19 +0000 (13:13 -0700)] 
Get rid of some duplicated code.

Have signed_relts_print() just call unsigned_relts_print() to do the
formatting, once it's ensured that the value is positive and printed a
leading minus sign if necessary.

5 years agoTests for the relts changes.
Guy Harris [Sat, 8 Aug 2015 19:57:14 +0000 (12:57 -0700)] 
Tests for the relts changes.

5 years agoCVE-2016-7993/Clean up relative time stamp printing.
Guy Harris [Sat, 8 Aug 2015 19:53:36 +0000 (12:53 -0700)] 
CVE-2016-7993/Clean up relative time stamp printing.

Have separate routines for signed and unsigned relative time stamps.
Have the routine for signed time stamps handle the case of -2^31, where
you can't negate it and have the result fit in a 32-bit signed integer.

There are currently no users of the signed relative time stamp routine,
but it's there in case anybody needs it (and is passing 32-bit
quantitites, so that there's a risk that a packet might contain -2^31 as
the time stamp).

Fixes an array overflow found with American Fuzzy Lop by Hanno Böck.

5 years agoCVE-2016-7983,7984/Don't use strchr() to scan packet data.
Guy Harris [Tue, 21 Jul 2015 00:23:41 +0000 (17:23 -0700)] 
CVE-2016-7983,7984/Don't use strchr() to scan packet data.

It can't be told to stop at the end of the packet data.  Add a
fn_printztn() that prints null-terminated strings, with a length check,
and which returns the number of bytes processed, or 0 if we ran out of
data.  That means it does the scanning we need, but safely.

Use it in the TFTP and BOOTP printers.

Fixes a heap overflow found with American Fuzzy Lop by Hanno Böck.

5 years agoCVE-2016-7929/Make sure a Juniper header TLV isn't bigger than what's left in the...
Guy Harris [Mon, 13 Jul 2015 23:52:51 +0000 (16:52 -0700)] 
CVE-2016-7929/Make sure a Juniper header TLV isn't bigger than what's left in the packet.

Fixes a heap overflow found with American Fuzzy Lop by Hanno Böck.

5 years agoCVE-2016-7923/Don't assume the target hardware address is <= 6 octets long.
Guy Harris [Wed, 8 Jul 2015 03:08:55 +0000 (20:08 -0700)] 
CVE-2016-7923/Don't assume the target hardware address is <= 6 octets long.

It might not be, either because an unusual hardware type is using ARP or
because a maliciously-constructed packet was sent.  Instead of comparing
against a 6-octet string of zeros with memcmp(), check each octet of the
address against 0.

Fixes a heap overflow found with American Fuzzy Lop by Hanno Böck.

5 years agoCVE-2016-7940/Add a bunch of bounds checks, and fix some printing.
Guy Harris [Tue, 7 Jul 2015 18:56:48 +0000 (11:56 -0700)] 
CVE-2016-7940/Add a bunch of bounds checks, and fix some printing.

The bounds checks fix some heap overflows found with American Fuzzy Lop
by Hanno Böck.

Add some ND_TTEST_/ND_TCHECK_ macros to extract.h to simplify writing
bounds checks for code that uses the other macros in that file.

Fix the printing of the SPB BPDU agreement digest - I don't think the
intent was to print the value of the first 4 bytes, that value + 4, that
value + 8, etc., I suspect it was to print the first 4 bytes, the next 4
bytes, etc..

5 years agoCheck against the packet length first.
Guy Harris [Sun, 5 Jul 2015 02:30:24 +0000 (19:30 -0700)] 
Check against the packet length first.

That way, if the packet is inherently too short, rather than just having
been cut short by the snapshot length, we'll report that properly.

5 years agoStop processing IPPROTO_ values once we hit IPPROTO_IPCOMP.
Guy Harris [Sun, 5 Jul 2015 01:45:11 +0000 (18:45 -0700)] 
Stop processing IPPROTO_ values once we hit IPPROTO_IPCOMP.

It's not like, for example, AH or ESP, where, following the header for
that protocol, there's another protocol with its own payload.

5 years ago"length" is now the *remaining* packet length.
Guy Harris [Sun, 5 Jul 2015 01:03:40 +0000 (18:03 -0700)] 
"length" is now the *remaining* packet length.

The loop that processes MPLS labels decrements the length for each
label, so it's the remaining length; don't subtract the total length of
the MPLS labels from it before handing it to packet printers.

5 years agoFix previous bounds checks.
Guy Harris [Sun, 5 Jul 2015 00:33:54 +0000 (17:33 -0700)] 
Fix previous bounds checks.

An XID could have no payload, e.g. an SNA "short form" XID.

If it *does* have a payload, and it's a "basic form" XID, it needs to be
at least 3 bytes long, not 2 bytes long.

5 years agoCVE-2016-7974/Don't try to dissect something with other than 4 as the IP version.
Guy Harris [Sat, 4 Jul 2015 02:08:59 +0000 (19:08 -0700)] 
CVE-2016-7974/Don't try to dissect something with other than 4 as the IP version.

Bad Things could happen, e.g. the dissector we call thinking it's been
handed an IPv6 header when we haven't handed it anything that large.

Fixes a heap overflow found with American Fuzzy Lop by Hanno Böck.

Update some .out files to correspond to that change.

5 years agoCVE-2016-7931/Add bounds and length checks.
Guy Harris [Sat, 4 Jul 2015 01:07:35 +0000 (18:07 -0700)] 
CVE-2016-7931/Add bounds and length checks.

Fixes a heap overflow found with American Fuzzy Lop by Hanno Böck.

5 years agoCVE-2016-7973/Add bounds and length checks.
Guy Harris [Sat, 4 Jul 2015 00:45:06 +0000 (17:45 -0700)] 
CVE-2016-7973/Add bounds and length checks.

Fixes heap overflows found with American Fuzzy Lop by Hanno Böck.

5 years agoCVE-2016-7936/Add a bounds check.
Guy Harris [Sat, 4 Jul 2015 00:32:38 +0000 (17:32 -0700)] 
CVE-2016-7936/Add a bounds check.

Fixes a heap overflow found with American Fuzzy Lop by Hanno Böck.

5 years agoCVE-2016-7930/Add a bounds check.
Guy Harris [Sat, 4 Jul 2015 00:25:39 +0000 (17:25 -0700)] 
CVE-2016-7930/Add a bounds check.

Fixes a heap overflow found with American Fuzzy Lop by Hanno Böck.

5 years agoCVE-2016-7928/Check whether we have the CPI before we fetch it.
Guy Harris [Sat, 4 Jul 2015 00:14:58 +0000 (17:14 -0700)] 
CVE-2016-7928/Check whether we have the CPI before we fetch it.

Fixes a heap overflow found with American Fuzzy Lop by Hanno Böck.

5 years agoCVE-2016-7975/Make sure we have the data offset field before fetching it.
Guy Harris [Fri, 3 Jul 2015 23:47:12 +0000 (16:47 -0700)] 
CVE-2016-7975/Make sure we have the data offset field before fetching it.

Fixes a heap overflow found with American Fuzzy Lop by Hanno Böck.

5 years agoCVE-2016-7924/Add some bounds checks.
Guy Harris [Fri, 3 Jul 2015 23:39:25 +0000 (16:39 -0700)] 
CVE-2016-7924/Add some bounds checks.

Fixes a heap overflow found with American Fuzzy Lop by Hanno Böck.

Also, get rid of the return value for oam_print(), as it's not used and
not useful.

5 years agoCVE-2016-7975/Fix another bounds check.
Guy Harris [Fri, 3 Jul 2015 23:28:25 +0000 (16:28 -0700)] 
CVE-2016-7975/Fix another bounds check.

Fixes a heap overflow found with American Fuzzy Lop by Hanno Böck.

5 years agoCVE-2016-7926/Do some additional bounds checking before calling isoclns_print().
Guy Harris [Fri, 3 Jul 2015 23:21:08 +0000 (16:21 -0700)] 
CVE-2016-7926/Do some additional bounds checking before calling isoclns_print().

Fixes a heap overflow found with American Fuzzy Lop by Hanno Böck.

5 years agoCVE-2016-7927/Do bounds checking on last_presentp before dereferencing it.
Guy Harris [Fri, 3 Jul 2015 23:01:36 +0000 (16:01 -0700)] 
CVE-2016-7927/Do bounds checking on last_presentp before dereferencing it.

Fixes a heap overflow found with American Fuzzy Lop by Hanno Böck.

5 years agoCVE-2016-7985,7986/Change the way protocols print link-layer addresses.
Guy Harris [Fri, 3 Jul 2015 22:54:14 +0000 (15:54 -0700)] 
CVE-2016-7985,7986/Change the way protocols print link-layer addresses.

If a protocol that runs under a link-layer protocol would print the
link-layer addresses for the packet as source and destination addresses
for the packet, don't have it blithely assume those link-layer addresses
are present or are at a particular offset from the beginning of that
protocol's data; Ethertypes, for example, are used by a number of
protocols, not all of which have Ethernet headers and not all of which
have any MAC headers.

Instead, pass the printers for those protocols structures with a pointer
to the address data and a pointer to a routine that prints the address.

Fixes some heap overflows found with American Fuzzy Lop by Hanno Böck.

5 years agoCVE-2016-7939/Add some bounds checks.
Guy Harris [Fri, 3 Jul 2015 22:16:20 +0000 (15:16 -0700)] 
CVE-2016-7939/Add some bounds checks.

Fixes heap overflows found with American Fuzzy Lop by Hanno Böck.

5 years agoUpdate test output for the previous change.
Guy Harris [Fri, 3 Jul 2015 23:53:58 +0000 (16:53 -0700)] 
Update test output for the previous change.