From 00eb71ac32e2736c85147ad5addf7ceed1e20db6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Valverde?= Date: Fri, 11 Dec 2015 01:24:45 +0000 Subject: MIPv6: Fix unknown MH Type message data length Also improve column info for unknown MH types. Ping-Bug: 11728 Change-Id: I4e54ae56dbb76eaf9ea4f33eb0ff497a518dbd9a Reviewed-on: https://code.wireshark.org/review/12513 Reviewed-by: Michael Mann Petri-Dish: Michael Mann Tested-by: Petri Dish Buildbot Reviewed-by: Anders Broman --- epan/dissectors/packet-mip6.c | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) (limited to 'epan') diff --git a/epan/dissectors/packet-mip6.c b/epan/dissectors/packet-mip6.c index a3c2466f95..4a2f9b032f 100644 --- a/epan/dissectors/packet-mip6.c +++ b/epan/dissectors/packet-mip6.c @@ -1137,7 +1137,7 @@ static int hf_mip6_bi_coa_ipv4 = -1; static int hf_mip6_bi_coa_ipv6 = -1; static int hf_mip6_binding_refresh_request = -1; -static int hf_mip6_unknown_mh_type = -1; +static int hf_mip6_unknown_type_data = -1; static int hf_mip6_fast_neighbor_advertisement = -1; static int hf_mip6_vsm_data = -1; static int hf_mip6_vsm_req_data = -1; @@ -1595,9 +1595,14 @@ dissect_mip6_hack(tvbuff_t *tvb, proto_tree *mip6_tree, packet_info *pinfo _U_) static int dissect_mip6_unknown(tvbuff_t *tvb, proto_tree *mip6_tree, packet_info *pinfo _U_) { - proto_tree_add_item(mip6_tree, hf_mip6_unknown_mh_type, tvb, MIP6_DATA_OFF, MIP6_DATA_OFF + 1, ENC_NA); + guint hdr_len, data_len; - return MIP6_DATA_OFF + 1; + hdr_len = (tvb_get_guint8(tvb, MIP6_HLEN_OFF) + 1) * 8; + data_len = hdr_len - MIP6_DATA_OFF; + + proto_tree_add_item(mip6_tree, hf_mip6_unknown_type_data, tvb, MIP6_DATA_OFF, data_len, ENC_NA); + + return hdr_len; } static int @@ -4041,7 +4046,7 @@ dissect_mip6(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U_ /* Process mobility header */ type = tvb_get_guint8(tvb, MIP6_TYPE_OFF); - col_add_fstr(pinfo->cinfo, COL_INFO, "%s", val_to_str_ext_const(type, &mip6_mh_types_ext, "")); + col_add_fstr(pinfo->cinfo, COL_INFO, "%s", val_to_str_ext(type, &mip6_mh_types_ext, "Unknown Mobility Header (%u)")); switch (type) { case MIP6_BRR: /* 0 Binding Refresh Request */ @@ -4132,8 +4137,7 @@ dissect_mip6(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U_ offset = dissect_pmip6_lra(tvb, mip6_tree, pinfo, offset); break; default: - dissect_mip6_unknown(tvb, mip6_tree, pinfo); - offset = len; + offset = dissect_mip6_unknown(tvb, mip6_tree, pinfo); break; } @@ -4849,8 +4853,8 @@ proto_register_mip6(void) FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL } }, - { &hf_mip6_unknown_mh_type, - { "Unknown MH Type", "mip6.unknown_mh_type", + { &hf_mip6_unknown_type_data, + { "Message Data", "mip6.unknown_type_data", FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL } }, -- cgit v1.2.3