diff options
author | Michael Mann <mmann78@netscape.net> | 2014-11-13 20:37:46 -0500 |
---|---|---|
committer | Michael Mann <mmann78@netscape.net> | 2014-11-14 03:46:23 +0000 |
commit | 6e535a8b7143dd61f59fa0680692c94a0d22e916 (patch) | |
tree | c3b977edf2f08827ebc148ada48041f33d511cc1 /epan/dissectors/packet-tcp.c | |
parent | 4a7dd620125f1b8711c70f9dbfe78ba1145e31e3 (diff) |
Multipath TCP checksum requires M flag set as well as enough option length.
Bug: 10692
Change-Id: I8d9874a2c0a6b98497d43804bcf27a8c7e152a9b
Reviewed-on: https://code.wireshark.org/review/5275
Reviewed-by: Michael Mann <mmann78@netscape.net>
Petri-Dish: Michael Mann <mmann78@netscape.net>
Reviewed-by: Alexis La Goutte <alexis.lagoutte@gmail.com>
Diffstat (limited to 'epan/dissectors/packet-tcp.c')
-rw-r--r-- | epan/dissectors/packet-tcp.c | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/epan/dissectors/packet-tcp.c b/epan/dissectors/packet-tcp.c index 39f4d38d51..c6225f1ca2 100644 --- a/epan/dissectors/packet-tcp.c +++ b/epan/dissectors/packet-tcp.c @@ -2740,6 +2740,7 @@ dissect_tcpopt_mptcp(const ip_tcp_opt *optp _U_, tvbuff_t *tvb, guint8 indx; guint8 flags; guint8 ipver; + int start_offset = offset; mptcp_tree = proto_tree_add_subtree(opt_tree, tvb, offset, optlen, ett_tcp_option_mptcp, &ti, "Multipath TCP"); @@ -2912,9 +2913,12 @@ dissect_tcpopt_mptcp(const ip_tcp_opt *optp _U_, tvbuff_t *tvb, 2, ENC_BIG_ENDIAN); offset += 2; - proto_tree_add_item(mptcp_tree, - hf_tcp_option_mptcp_checksum, tvb, offset, - 2, ENC_BIG_ENDIAN); + if ((int)optlen >= offset-start_offset+4) + { + proto_tree_add_item(mptcp_tree, + hf_tcp_option_mptcp_checksum, tvb, offset, + 2, ENC_BIG_ENDIAN); + } } break; |