This also fixes possible crashes due to passing NULL to strlen function Changes since v1; * Fixed a typo spotted by Serge
Signed-off-by: S.Çağlar Onur <cag...@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..caf92c4 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 && veth1) + 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 ------------------------------------------------------------------------------ Shape the Mobile Experience: Free Subscription Software experts and developers: Be at the forefront of tech innovation. Intel(R) Software Adrenaline delivers strategic insight and game-changing conversations that shape the rapidly evolving mobile landscape. Sign up now. http://pubads.g.doubleclick.net/gampad/clk?id=63431311&iu=/4140/ostg.clktrk _______________________________________________ Lxc-devel mailing list Lxc-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/lxc-devel