[lxc-devel] [PATCH] fix memory leaks reported by cppcheck in src/lxc/conf.c, this also fixes possible crashes due to passing NULL to strlen
S.Çağlar Onur
caglar at 10ur.org
Fri Nov 15 20:40:30 UTC 2013
Signed-off-by: S.Çağlar Onur <caglar at 10ur.org>
---
src/lxc/conf.c | 28 +++++++++++++++++++---------
1 file changed, 19 insertions(+), 9 deletions(-)
diff --git a/src/lxc/conf.c b/src/lxc/conf.c
index dec1c05..1af50e2 100644
--- a/src/lxc/conf.c
+++ b/src/lxc/conf.c
@@ -2425,23 +2425,26 @@ static int instanciate_veth(struct lxc_handler *handler, struct lxc_netdev *netd
return -1;
}
veth1 = mkifname(veth1buf);
+ if (!veth1) {
+ ERROR("failed to allocate a temporary name");
+ return -1;
+ }
/* store away for deconf */
memcpy(netdev->priv.veth_attr.veth1, veth1, IFNAMSIZ);
}
snprintf(veth2buf, sizeof(veth2buf), "vethXXXXXX");
veth2 = mkifname(veth2buf);
-
- if (!strlen(veth1) || !strlen(veth2)) {
+ if (!veth2) {
ERROR("failed to allocate a temporary name");
- return -1;
+ goto out_delete;
}
err = lxc_veth_create(veth1, veth2);
if (err) {
ERROR("failed to create %s-%s : %s", veth1, veth2,
strerror(-err));
- return -1;
+ goto out_delete;
}
/* changing the high byte of the mac address to 0xfe, the bridge interface
@@ -2500,6 +2503,10 @@ static int instanciate_veth(struct lxc_handler *handler, struct lxc_netdev *netd
out_delete:
lxc_netdev_delete_by_name(veth1);
+ if (!netdev->priv.veth_attr.pair && veth2)
+ free(veth1);
+ if(veth2)
+ free(veth2);
return -1;
}
@@ -2537,7 +2544,7 @@ static int instanciate_macvlan(struct lxc_handler *handler, struct lxc_netdev *n
return -1;
peer = mkifname(peerbuf);
- if (!strlen(peer)) {
+ if (!peer) {
ERROR("failed to make a temporary name");
return -1;
}
@@ -2547,27 +2554,30 @@ static int instanciate_macvlan(struct lxc_handler *handler, struct lxc_netdev *n
if (err) {
ERROR("failed to create macvlan interface '%s' on '%s' : %s",
peer, netdev->link, strerror(-err));
- return -1;
+ goto out;
}
netdev->ifindex = if_nametoindex(peer);
if (!netdev->ifindex) {
ERROR("failed to retrieve the index for %s", peer);
- lxc_netdev_delete_by_name(peer);
- return -1;
+ goto out;
}
if (netdev->upscript) {
err = run_script(handler->name, "net", netdev->upscript, "up",
"macvlan", netdev->link, (char*) NULL);
if (err)
- return -1;
+ goto out;
}
DEBUG("instanciated macvlan '%s', index is '%d' and mode '%d'",
peer, netdev->ifindex, netdev->priv.macvlan_attr.mode);
return 0;
+out:
+ lxc_netdev_delete_by_name(peer);
+ free(peer);
+ return -1;
}
static int shutdown_macvlan(struct lxc_handler *handler, struct lxc_netdev *netdev)
--
1.8.3.2
More information about the lxc-devel
mailing list