diff options
author | Ivan Nardi <nardi.ivan@gmail.com> | 2018-05-07 08:16:54 +0200 |
---|---|---|
committer | Pascal Quantin <pascal.quantin@gmail.com> | 2018-05-07 19:03:45 +0000 |
commit | 6c0f6f52d3fc61f6012a0a8637ad87031d09c0b1 (patch) | |
tree | e87dc3505a418a89d43ab345cc24361439d438b5 | |
parent | 6e9c3438bca1c594b2fdadd1a210af097dac5bbb (diff) |
gtp, gtpv2: fix memory leaks in association code (found via ASAN)
Change-Id: Id8891dffa3c4db3ec82de3a0597550eb73a1d25f
Reviewed-on: https://code.wireshark.org/review/27380
Petri-Dish: Pascal Quantin <pascal.quantin@gmail.com>
Tested-by: Petri Dish Buildbot
Reviewed-by: Pascal Quantin <pascal.quantin@gmail.com>
-rw-r--r-- | epan/dissectors/packet-gtp.c | 8 | ||||
-rw-r--r-- | epan/dissectors/packet-gtpv2.c | 10 |
2 files changed, 5 insertions, 13 deletions
diff --git a/epan/dissectors/packet-gtp.c b/epan/dissectors/packet-gtp.c index c0e82bbe1f..c9ffd56d72 100644 --- a/epan/dissectors/packet-gtp.c +++ b/epan/dissectors/packet-gtp.c @@ -5461,7 +5461,7 @@ decode_gtp_gsn_addr(tvbuff_t * tvb, int offset, packet_info * pinfo _U_, proto_t if (g_gtp_session && gtp_version == 1 && !PINFO_FD_VISITED(pinfo)) { if (!ip_exists(*gsn_address, args->ip_list)) { - copy_address(&args->last_ip, gsn_address); + copy_address_wmem(wmem_packet_scope(), &args->last_ip, gsn_address); wmem_list_prepend(args->ip_list, gsn_address); } } @@ -8425,11 +8425,7 @@ track_gtp_session(tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, gtp_hd else { /* We have to check if its teid == teid_cp and ip.dst == gsn_ipv4 from the lists, if that is the case then we have to assign the corresponding session ID */ - const address * dst_address; - address gsn_address; - dst_address = &pinfo->dst; - copy_address(&gsn_address, dst_address); - if ((get_frame(gsn_address, (guint32)gtp_hdr->teid, &frame_teid_cp) == 1)) { + if ((get_frame(pinfo->dst, (guint32)gtp_hdr->teid, &frame_teid_cp) == 1)) { /* Then we have to set its session ID */ session = (guint32*)g_hash_table_lookup(session_table, &frame_teid_cp); if (session != NULL) { diff --git a/epan/dissectors/packet-gtpv2.c b/epan/dissectors/packet-gtpv2.c index 449310b3f6..1468bccf7e 100644 --- a/epan/dissectors/packet-gtpv2.c +++ b/epan/dissectors/packet-gtpv2.c @@ -2836,11 +2836,11 @@ dissect_gtpv2_f_teid(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, pr wmem_list_prepend(args->teid_list, teid); } if (ipv4 != NULL && !ip_exists(*ipv4, args->ip_list)) { - copy_address(&args->last_ip, ipv4); + copy_address_wmem(wmem_packet_scope(), &args->last_ip, ipv4); wmem_list_prepend(args->ip_list, ipv4); } if (ipv6 != NULL && !ip_exists(*ipv6, args->ip_list)) { - copy_address(&args->last_ip, ipv6); + copy_address_wmem(wmem_packet_scope(), &args->last_ip, ipv6); wmem_list_prepend(args->ip_list, ipv6); } } @@ -7116,11 +7116,7 @@ track_gtpv2_session(tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, gtpv else if (gtpv2_hdr->message != GTPV2_CREATE_SESSION_RESPONSE) { /* We have to check if its teid == teid_cp and ip.dst == gsn_ipv4 from the lists, if that is the case then we have to assign the corresponding session ID */ - const address * dst_address; - address gsn_address; - dst_address = &pinfo->dst; - copy_address(&gsn_address, dst_address); - if ((get_frame(gsn_address, (guint32)gtpv2_hdr->teid, &frame_teid_cp) == 1)) { + if ((get_frame(pinfo->dst, (guint32)gtpv2_hdr->teid, &frame_teid_cp) == 1)) { /* Then we have to set its session ID */ session = (guint32*)g_hash_table_lookup(session_table, &frame_teid_cp); if (session != NULL) { |