aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dissectors/packet-btatt.c
diff options
context:
space:
mode:
authorPascal Quantin <pascal.quantin@gmail.com>2017-09-10 19:20:30 +0200
committerAnders Broman <a.broman58@gmail.com>2017-09-11 05:12:36 +0000
commit3689dc1db36037436b1616715f9a3f888fc9a0f6 (patch)
tree56778eab52b2d8c22f884f67d556d1cfdccb0f43 /epan/dissectors/packet-btatt.c
parent1d3ca5ad41fc3a725442439464f9ead944b21779 (diff)
BTATT: add curr_layer_num to key tracking request / response
Otherwise in case of frames containing multiple BTATT packets at different levels of encapsulation, we can retrieve the wrong structure and start using the union with a wrong opcode based type Bug: 14049 Change-Id: Ica5d8af8e84161d6f9daebbb90334f20082c5fa4 Reviewed-on: https://code.wireshark.org/review/23470 Petri-Dish: Pascal Quantin <pascal.quantin@gmail.com> Reviewed-by: Anders Broman <a.broman58@gmail.com>
Diffstat (limited to 'epan/dissectors/packet-btatt.c')
-rw-r--r--epan/dissectors/packet-btatt.c23
1 files changed, 15 insertions, 8 deletions
diff --git a/epan/dissectors/packet-btatt.c b/epan/dissectors/packet-btatt.c
index 7d5d1b41a5..b48884b95e 100644
--- a/epan/dissectors/packet-btatt.c
+++ b/epan/dissectors/packet-btatt.c
@@ -3635,14 +3635,18 @@ get_request(tvbuff_t *tvb, gint offset, packet_info *pinfo, guint8 opcode,
request_data_t *request_data;
wmem_tree_key_t key[4];
wmem_tree_t *sub_wmemtree;
- gint frame_number;
+ guint32 frame_number, curr_layer_num;
+
+ curr_layer_num = pinfo->curr_layer_num;
key[0].length = 1;
key[0].key = &bluetooth_data->interface_id;
key[1].length = 1;
key[1].key = &bluetooth_data->adapter_id;
- key[2].length = 0;
- key[2].key = NULL;
+ key[2].length = 1;
+ key[2].key = &curr_layer_num;
+ key[3].length = 0;
+ key[3].key = NULL;
frame_number = pinfo->num;
@@ -3741,20 +3745,23 @@ static void
save_request(packet_info *pinfo, guint8 opcode, union request_parameters_union parameters,
bluetooth_data_t *bluetooth_data)
{
- wmem_tree_key_t key[4];
- guint32 frame_number;
+ wmem_tree_key_t key[5];
+ guint32 frame_number, curr_layer_num;
request_data_t *request_data;
frame_number = pinfo->num;
+ curr_layer_num = pinfo->curr_layer_num;
key[0].length = 1;
key[0].key = &bluetooth_data->interface_id;
key[1].length = 1;
key[1].key = &bluetooth_data->adapter_id;
key[2].length = 1;
- key[2].key = &frame_number;
- key[3].length = 0;
- key[3].key = NULL;
+ key[2].key = &curr_layer_num;
+ key[3].length = 1;
+ key[3].key = &frame_number;
+ key[4].length = 0;
+ key[4].key = NULL;
request_data = wmem_new(wmem_file_scope(), request_data_t);
request_data->opcode = opcode;