]> git.proxmox.com Git - mirror_lxc.git/commitdiff
network: remove allocation from lxc_mkifname()
authorChristian Brauner <christian.brauner@ubuntu.com>
Sun, 3 Sep 2017 18:37:21 +0000 (20:37 +0200)
committerChristian Brauner <christian.brauner@ubuntu.com>
Sun, 3 Sep 2017 18:39:59 +0000 (20:39 +0200)
lxc_mkifname() really doesn't need to allocate any memory.

Signed-off-by: Christian Brauner <christian.brauner@ubuntu.com>
src/lxc/criu.c
src/lxc/lxc_user_nic.c
src/lxc/network.c
src/lxc/network.h

index 2f444ec440593e7d5349a0b43e6dc9c19c1291e8..9305b52a025aa61852bb916da023cdd181d21c33 100644 (file)
@@ -767,14 +767,10 @@ static bool restore_net_info(struct lxc_container *c)
 
                if (netdev->priv.veth_attr.pair[0] == '\0' &&
                    netdev->priv.veth_attr.veth1[0] == '\0') {
-                       char *tmp;
-
-                       tmp = lxc_mkifname(template);
-                       if (!tmp)
+                       if (!lxc_mkifname(template))
                                goto out_unlock;
 
-                       strcpy(netdev->priv.veth_attr.veth1, tmp);
-                       free(tmp);
+                       strcpy(netdev->priv.veth_attr.veth1, template);
                }
        }
 
index 6920c5462419ebe5168b0647a3efaaf1bf4d395f..9026bc425b4d379adf116009a0f836b2997d6c98 100644 (file)
@@ -566,23 +566,20 @@ out_del:
 static char *get_new_nicname(char *br, int pid, char **cnic)
 {
        int ret;
-       char *nicname;
-       char template[IFNAMSIZ];
+       char nicname[IFNAMSIZ];
 
-       ret = snprintf(template, sizeof(template), "vethXXXXXX");
-       if (ret < 0 || (size_t)ret >= sizeof(template))
+       ret = snprintf(nicname, sizeof(nicname), "vethXXXXXX");
+       if (ret < 0 || (size_t)ret >= sizeof(nicname))
                return NULL;
 
-       nicname = lxc_mkifname(template);
-       if (!nicname)
+       if (!lxc_mkifname(nicname))
                return NULL;
 
        if (!create_nic(nicname, br, pid, cnic)) {
-               free(nicname);
                return NULL;
        }
 
-       return nicname;
+       return strdup(nicname);
 }
 
 struct entry_line {
index 1126cdec391afdc37dbd4fa359a648156f3279e7..d2247273c00f995fb2528c57009265c593d2f8bb 100644 (file)
@@ -218,9 +218,6 @@ static int instantiate_veth(struct lxc_handler *handler, struct lxc_netdev *netd
 out_delete:
        if (netdev->ifindex != 0)
                lxc_netdev_delete_by_name(veth1);
-       if (netdev->priv.veth_attr.pair != veth1)
-               free(veth1);
-       free(veth2);
        return -1;
 }
 
@@ -247,29 +244,29 @@ static int instantiate_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));
-               goto out;
+               goto on_error;
        }
 
        netdev->ifindex = if_nametoindex(peer);
        if (!netdev->ifindex) {
                ERROR("Failed to retrieve ifindex for \"%s\"", peer);
-               goto out;
+               goto on_error;
        }
 
        if (netdev->upscript) {
                err = run_script(handler->name, "net", netdev->upscript, "up",
                                 "macvlan", netdev->link, (char*) NULL);
                if (err)
-                       goto out;
+                       goto on_error;
        }
 
        DEBUG("Instantiated macvlan \"%s\" with ifindex is %d and mode %d",
              peer, netdev->ifindex, netdev->priv.macvlan_attr.mode);
 
        return 0;
-out:
+
+on_error:
        lxc_netdev_delete_by_name(peer);
-       free(peer);
        return -1;
 }
 
@@ -1918,14 +1915,14 @@ const char *lxc_net_type_to_str(int type)
 
 static const char padchar[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
 
-char *lxc_mkifname(const char *template)
+char *lxc_mkifname(char *template)
 {
-       int ifexists = 0;
-       size_t i = 0;
-       char *name = NULL;
        unsigned int seed;
        FILE *urandom;
        struct ifaddrs *ifa, *ifaddr;
+       char name[IFNAMSIZ];
+       bool exists = false;
+       size_t i = 0;
 
        if (strlen(template) >= IFNAMSIZ)
                return NULL;
@@ -1949,17 +1946,14 @@ char *lxc_mkifname(const char *template)
 
        /* Generate random names until we find one that doesn't exist. */
        while (true) {
-               ifexists = 0;
-               name = strdup(template);
-
-               if (name == NULL)
-                       return NULL;
+               name[0] = '\0';
+               strcpy(name, template);
 
+               exists = false;
                for (i = 0; i < strlen(name); i++) {
                        if (name[i] == 'X') {
 #ifdef HAVE_RAND_R
-                               name[i] = padchar[rand_r(&seed) %
-                                                 (strlen(padchar) - 1)];
+                               name[i] = padchar[rand_r(&seed) % (strlen(padchar) - 1)];
 #else
                                name[i] = padchar[rand() % (strlen(padchar) - 1)];
 #endif
@@ -1967,20 +1961,18 @@ char *lxc_mkifname(const char *template)
                }
 
                for (ifa = ifaddr; ifa != NULL; ifa = ifa->ifa_next) {
-                       if (strcmp(ifa->ifa_name, name) == 0) {
-                               ifexists = 1;
+                       if (!strcmp(ifa->ifa_name, name)) {
+                               exists = true;
                                break;
                        }
                }
 
-               if (ifexists == 0)
+               if (!exists)
                        break;
-
-               free(name);
        }
 
        freeifaddrs(ifaddr);
-       return name;
+       return strcpy(template, name);
 }
 
 int setup_private_host_hw_addr(char *veth1)
index fe127734fba27e4e9b0aedd14aab8fb705146ba7..833bfe6f3639f244254604b42c3b500da165ffc2 100644 (file)
@@ -256,7 +256,7 @@ extern int lxc_neigh_proxy_off(const char *name, int family);
 /* Generate a new unique network interface name.
  * Allocated memory must be freed by caller.
  */
-extern char *lxc_mkifname(const char *template);
+extern char *lxc_mkifname(char *template);
 
 extern const char *lxc_net_type_to_str(int type);
 extern int setup_private_host_hw_addr(char *veth1);