diff options
author | Pascal Quantin <pascal.quantin@gmail.com> | 2018-04-12 15:27:29 +0200 |
---|---|---|
committer | Pascal Quantin <pascal.quantin@gmail.com> | 2018-04-13 16:26:33 +0000 |
commit | 75a63c6dfa0f4adc81bbceb415a326f32c49e3d4 (patch) | |
tree | 231db900539071abf842bd7dce0817953477756d /epan/dissectors | |
parent | 209d8619471993ddcf26f325c28b1fff0125b321 (diff) |
PDCP LTE: add expert info for unknown / missing UDP framing tags
Change-Id: Iafeb49b529da4f62149124193326a4ff6c3960b9
Reviewed-on: https://code.wireshark.org/review/26912
Reviewed-by: Pascal Quantin <pascal.quantin@gmail.com>
Diffstat (limited to 'epan/dissectors')
-rw-r--r-- | epan/dissectors/packet-pdcp-lte.c | 26 |
1 files changed, 23 insertions, 3 deletions
diff --git a/epan/dissectors/packet-pdcp-lte.c b/epan/dissectors/packet-pdcp-lte.c index 385e5d17d4..548b4aba02 100644 --- a/epan/dissectors/packet-pdcp-lte.c +++ b/epan/dissectors/packet-pdcp-lte.c @@ -147,6 +147,9 @@ static expert_field ei_pdcp_lte_reserved_bits_not_zero = EI_INIT; static expert_field ei_pdcp_lte_sequence_analysis_sn_repeated = EI_INIT; static expert_field ei_pdcp_lte_sequence_analysis_sn_missing = EI_INIT; static expert_field ei_pdcp_lte_digest_wrong = EI_INIT; +static expert_field ei_pdcp_lte_unknown_udp_framing_tag = EI_INIT; +static expert_field ei_pdcp_lte_missing_udp_framing_tag = EI_INIT; + /*------------------------------------- * UAT for UE Keys @@ -1290,6 +1293,19 @@ static dissector_handle_t lookup_rrc_dissector_handle(struct pdcp_lte_info *p_p /* Forwad declarations */ static int dissect_pdcp_lte(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data); +static void report_heur_error(proto_tree *tree, packet_info *pinfo, expert_field *eiindex, + tvbuff_t *tvb, gint start, gint length) +{ + proto_item *ti; + proto_tree *subtree; + + col_set_str(pinfo->cinfo, COL_PROTOCOL, "PDCP-LTE"); + col_clear(pinfo->cinfo, COL_INFO); + ti = proto_tree_add_item(tree, proto_pdcp_lte, tvb, 0, -1, ENC_NA); + subtree = proto_item_add_subtree(ti, ett_pdcp); + proto_tree_add_expert(subtree, pinfo, eiindex, tvb, start, length); +} + /* Heuristic dissector looks for supported framing protocol (see wiki page) */ static gboolean dissect_pdcp_lte_heur(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_) @@ -1406,13 +1422,15 @@ static gboolean dissect_pdcp_lte_heur(tvbuff_t *tvb, packet_info *pinfo, default: /* It must be a recognised tag */ - return FALSE; + report_heur_error(tree, pinfo, &ei_pdcp_lte_unknown_udp_framing_tag, tvb, offset-1, 1); + return TRUE; } } if ((p_pdcp_lte_info->plane == USER_PLANE) && (seqnumLengthTagPresent == FALSE)) { /* Conditional field is not present */ - return FALSE; + report_heur_error(tree, pinfo, &ei_pdcp_lte_missing_udp_framing_tag, tvb, 0, offset); + return TRUE; } if (!infoAlreadySet) { @@ -2863,7 +2881,9 @@ void proto_register_pdcp(void) { &ei_pdcp_lte_sequence_analysis_sn_repeated, { "pdcp-lte.sequence-analysis.sn-repeated", PI_SEQUENCE, PI_WARN, "PDCP SN repeated", EXPFILL }}, { &ei_pdcp_lte_sequence_analysis_wrong_sequence_number, { "pdcp-lte.sequence-analysis.wrong-sequence-number", PI_SEQUENCE, PI_WARN, "Wrong Sequence Number", EXPFILL }}, { &ei_pdcp_lte_reserved_bits_not_zero, { "pdcp-lte.reserved-bits-not-zero", PI_MALFORMED, PI_ERROR, "Reserved bits not zero", EXPFILL }}, - { &ei_pdcp_lte_digest_wrong, { "pdcp-lte.maci-wrong", PI_SEQUENCE, PI_ERROR, "MAC-I doesn't match expected value", EXPFILL }} + { &ei_pdcp_lte_digest_wrong, { "pdcp-lte.maci-wrong", PI_SEQUENCE, PI_ERROR, "MAC-I doesn't match expected value", EXPFILL }}, + { &ei_pdcp_lte_unknown_udp_framing_tag, { "pdcp-lte.unknown-udp-framing-tag", PI_UNDECODED, PI_WARN, "Unknown UDP framing tag, aborting dissection", EXPFILL }}, + { &ei_pdcp_lte_missing_udp_framing_tag, { "pdcp-lte.missing-udp-framing-tag", PI_UNDECODED, PI_WARN, "Missing UDP framing conditional tag, aborting dissection", EXPFILL }} }; static const enum_val_t sequence_analysis_vals[] = { |