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..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


------------------------------------------------------------------------------
DreamFactory - Open Source REST & JSON Services for HTML5 & Native Apps
OAuth, Users, Roles, SQL, NoSQL, BLOB Storage and External API Access
Free app hosting. Or install the open source package on any LAMP server.
Sign up and see examples for AngularJS, jQuery, Sencha Touch and Native!
http://pubads.g.doubleclick.net/gampad/clk?id=63469471&iu=/4140/ostg.clktrk
_______________________________________________
Lxc-devel mailing list
Lxc-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/lxc-devel

Reply via email to