From 6e535a8b7143dd61f59fa0680692c94a0d22e916 Mon Sep 17 00:00:00 2001 From: Michael Mann Date: Thu, 13 Nov 2014 20:37:46 -0500 Subject: [PATCH] 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 Petri-Dish: Michael Mann Reviewed-by: Alexis La Goutte --- epan/dissectors/packet-tcp.c | 10 +++++++--- 1 file 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;