diff options
author | Evan Huus <eapache@gmail.com> | 2014-11-25 20:27:07 -0500 |
---|---|---|
committer | Evan Huus <eapache@gmail.com> | 2014-11-26 03:33:45 +0000 |
commit | a559f2a050947f793c00159c0cd4d30f403f217c (patch) | |
tree | 635ca64d090f0272d84b79ff26e8af4f474a5d61 /epan/dissectors/packet-dec-dnart.c | |
parent | e843c6797db98bfceab382d5d7e76727e1014f5e (diff) | |
download | wireshark-a559f2a050947f793c00159c0cd4d30f403f217c.tar.gz |
dec-dnart: use pinfo-scoped memory for addresses
They may be accessed during the print phase, at which point packet-scope memory
has already been freed.
Bug: 10724
Change-Id: Ifcf5fc0c0857614edf85349b12dfe605abf6fef7
Reviewed-on: https://code.wireshark.org/review/5497
Reviewed-by: Evan Huus <eapache@gmail.com>
Diffstat (limited to 'epan/dissectors/packet-dec-dnart.c')
-rw-r--r-- | epan/dissectors/packet-dec-dnart.c | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/epan/dissectors/packet-dec-dnart.c b/epan/dissectors/packet-dec-dnart.c index 6600d64061..a3454f7fba 100644 --- a/epan/dissectors/packet-dec-dnart.c +++ b/epan/dissectors/packet-dec-dnart.c @@ -350,12 +350,13 @@ dnet_ntoa(const guint8 *data) } static void -set_dnet_address(address *paddr_src, address *paddr_tgt) +set_dnet_address(packet_info *pinfo, address *paddr_src, address *paddr_tgt) { if (paddr_tgt->type != AT_STRINGZ && paddr_src->type == AT_ETHER) { char *addr = dnet_ntoa((const guint8 *)paddr_src->data); if (addr != NULL) - SET_ADDRESS(paddr_tgt, AT_STRINGZ, 1, addr); + SET_ADDRESS(paddr_tgt, AT_STRINGZ, 1, + wmem_strdup(pinfo->pool, addr)); } } @@ -376,10 +377,10 @@ dissect_dec_rt(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) col_set_str(pinfo->cinfo, COL_PROTOCOL, "DEC DNA"); col_clear(pinfo->cinfo, COL_INFO); - set_dnet_address(&pinfo->dl_src, &pinfo->net_src); - set_dnet_address(&pinfo->dl_src, &pinfo->src); - set_dnet_address(&pinfo->dl_dst, &pinfo->net_dst); - set_dnet_address(&pinfo->dl_dst, &pinfo->dst); + set_dnet_address(pinfo, &pinfo->dl_src, &pinfo->net_src); + set_dnet_address(pinfo, &pinfo->dl_src, &pinfo->src); + set_dnet_address(pinfo, &pinfo->dl_dst, &pinfo->net_dst); + set_dnet_address(pinfo, &pinfo->dl_dst, &pinfo->dst); offset += 2; msg_flags = tvb_get_guint8(tvb, offset); |