summaryrefslogtreecommitdiff
path: root/epan/dissectors/packet-dec-dnart.c
diff options
context:
space:
mode:
authorEvan Huus <eapache@gmail.com>2014-11-25 20:27:07 -0500
committerEvan Huus <eapache@gmail.com>2014-11-26 03:33:45 +0000
commita559f2a050947f793c00159c0cd4d30f403f217c (patch)
tree635ca64d090f0272d84b79ff26e8af4f474a5d61 /epan/dissectors/packet-dec-dnart.c
parente843c6797db98bfceab382d5d7e76727e1014f5e (diff)
downloadwireshark-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.c13
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);