diff options
author | Daniel Golle <daniel@makrotopia.org> | 2020-04-13 16:24:25 +0100 |
---|---|---|
committer | Daniel Golle <daniel@makrotopia.org> | 2020-04-13 17:36:24 +0100 |
commit | aaaca2e40895775135b13a1992ff139b7610b217 (patch) | |
tree | 7fe8031b4b2103c32ada9d45dc722a034c12ee02 | |
parent | dfd0b106f63da5f14c413b483bffd1f09768460e (diff) |
interface: allocate and free memory for jail name
Memory returned by blogmsg_get_string() is volatile, hence use strdup()
to have a permanent copy of the returned string and free it when no
longer needed.
Fixes: 1321c1b ("add basic support for jail network namespaces")
Signed-off-by: Daniel Golle <daniel@makrotopia.org>
-rw-r--r-- | interface.c | 8 | ||||
-rw-r--r-- | interface.h | 2 |
2 files changed, 8 insertions, 2 deletions
diff --git a/interface.c b/interface.c index f661cfe..51f6e51 100644 --- a/interface.c +++ b/interface.c @@ -684,6 +684,9 @@ interface_do_free(struct interface *iface) free(iface->config); netifd_ubus_remove_interface(iface); avl_delete(&interfaces.avl, &iface->node.avl); + if (iface->jail) + free(iface->jail); + free(iface); } @@ -893,7 +896,7 @@ interface_alloc(const char *name, struct blob_attr *config, bool dynamic) iface->jail = NULL; if ((cur = tb[IFACE_ATTR_JAIL])) { - iface->jail = blobmsg_get_string(cur); + iface->jail = strdup(blobmsg_get_string(cur)); iface->autostart = false; } @@ -1325,6 +1328,9 @@ interface_change_config(struct interface *if_old, struct interface *if_new) if_old->device_config = if_new->device_config; if_old->config_autostart = if_new->config_autostart; + if (if_old->jail) + free(if_old->jail); + if_old->jail = if_new->jail; if (if_old->jail) if_old->autostart = false; diff --git a/interface.h b/interface.h index 0d384ef..cd09812 100644 --- a/interface.h +++ b/interface.h @@ -108,7 +108,7 @@ struct interface { const char *name; const char *ifname; - const char *jail; + char *jail; int netns_fd; bool available; |