summaryrefslogtreecommitdiff
path: root/extcap.c
diff options
context:
space:
mode:
authorPeter Wu <peter@lekensteyn.nl>2016-09-16 17:05:55 +0200
committerPeter Wu <peter@lekensteyn.nl>2016-09-17 10:44:23 +0000
commit2c33f74bc68c0356eb44a11918d690ac8f26ab63 (patch)
tree6864b150058ac0ca83ca21a6707a6e114a881972 /extcap.c
parent05ae6a7560a8f39daac073d2094fdcde6975a4ec (diff)
downloadwireshark-2c33f74bc68c0356eb44a11918d690ac8f26ab63.tar.gz
extcap: fix heap-use-after free after saving prefs
All strings passed to prefs must be valid for the lifetime of the program (before prefs_cleanup is called). Use wmem for this purpose. Fixes v2.3.0rc0-660-g26bf66f Change-Id: I94f3bbb8ac6e18ae59d6462525f6bbc46fdb0f1f Reviewed-on: https://code.wireshark.org/review/17737 Petri-Dish: Peter Wu <peter@lekensteyn.nl> Reviewed-by: Stig Bjørlykke <stig@bjorlykke.org> Tested-by: Petri Dish Buildbot <buildbot-no-reply@wireshark.org> Reviewed-by: Peter Wu <peter@lekensteyn.nl>
Diffstat (limited to 'extcap.c')
-rw-r--r--extcap.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/extcap.c b/extcap.c
index 226105a86e..e8e612dac2 100644
--- a/extcap.c
+++ b/extcap.c
@@ -606,6 +606,7 @@ static gboolean search_cb(const gchar *extcap _U_, const gchar *ifname _U_, gcha
if ( ( pref = prefs_find_preference(dev_module, pref_ifname) ) == NULL ) {
char *pref_name_for_prefs;
+ char *pref_title = wmem_strdup(wmem_epan_scope(), arg->display);
arg->pref_valptr = extcap_prefs_dynamic_valptr(pref_ifname, &pref_name_for_prefs);
/* Set an initial value if any (the string will be copied at registration) */
@@ -614,7 +615,7 @@ static gboolean search_cb(const gchar *extcap _U_, const gchar *ifname _U_, gcha
}
prefs_register_string_preference(dev_module, pref_name_for_prefs,
- arg->display, arg->display, (const char **)arg->pref_valptr);
+ pref_title, pref_title, (const char **)arg->pref_valptr);
} else {
/* Been here before, restore stored value */
if (! arg->pref_valptr && pref->varp.string)