summaryrefslogtreecommitdiff
path: root/config.c
diff options
context:
space:
mode:
authorFelix Fietkau <nbd@openwrt.org>2011-12-04 20:07:02 +0100
committerFelix Fietkau <nbd@openwrt.org>2011-12-04 20:07:02 +0100
commit581c0d568f6fa7348a164077d761a04d0bb2b4e8 (patch)
treea0fda7a4eb970c169519474dff2f02b49bbd8b56 /config.c
parente8714a2ef87d0741ca05e2ef30158452f30fed17 (diff)
downloadnetifd-581c0d568f6fa7348a164077d761a04d0bb2b4e8.tar.gz
fix use-after-free on config reload
Diffstat (limited to 'config.c')
-rw-r--r--config.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/config.c b/config.c
index fcfea7c..8472d44 100644
--- a/config.c
+++ b/config.c
@@ -176,6 +176,14 @@ config_parse_interface(struct uci_section *s)
memcpy(config, b.head, blob_pad_len(b.head));
interface_add(iface, config);
+ /*
+ * need to look up the interface name again, in case of config update,
+ * the pointer will have changed
+ */
+ iface = vlist_find(&interfaces, s->e.name, iface, node);
+ if (!iface)
+ return;
+
dev = iface->main_dev.dev;
if (!dev || !dev->default_config)
return;