]> git.ipfire.org Git - thirdparty/lxc.git/commitdiff
secure coding: network: strcpy => strlcpy
authorDonghwa Jeong <dh48.jeong@samsung.com>
Mon, 18 Jun 2018 04:42:48 +0000 (13:42 +0900)
committerChristian Brauner <christian.brauner@ubuntu.com>
Mon, 10 Dec 2018 08:26:50 +0000 (09:26 +0100)
Signed-off-by: Donghwa Jeong <dh48.jeong@samsung.com>
src/lxc/network.c [changed mode: 0755->0644]

old mode 100755 (executable)
new mode 100644 (file)
index d6c224e..12a7f07
@@ -1911,7 +1911,7 @@ char *lxc_mkifname(char *template)
        /* Generate random names until we find one that doesn't exist. */
        while (true) {
                name[0] = '\0';
-               strcpy(name, template);
+               (void)strlcpy(name, template, IFNAMSIZ);
 
                exists = false;
                for (i = 0; i < strlen(name); i++) {
@@ -1936,7 +1936,9 @@ char *lxc_mkifname(char *template)
        }
 
        freeifaddrs(ifaddr);
-       return strcpy(template, name);
+       (void)strlcpy(template, name, strlen(template) + 1);
+
+       return template;
 }
 
 int setup_private_host_hw_addr(char *veth1)
@@ -2028,6 +2030,7 @@ static int lxc_create_network_unpriv_exec(const char *lxcpath, const char *lxcna
        char *token, *saveptr = NULL;
        char netdev_link[IFNAMSIZ];
        char buffer[MAXPATHLEN] = {0};
+       size_t retlen;
 
        if (netdev->type != LXC_NET_VETH) {
                ERROR("Network type %d not support for unprivileged use", netdev->type);
@@ -2144,12 +2147,12 @@ static int lxc_create_network_unpriv_exec(const char *lxcpath, const char *lxcna
                return -1;
        }
 
-       if (strlen(token) >= IFNAMSIZ) {
+       retlen = strlcpy(netdev->priv.veth_attr.veth1, token, IFNAMSIZ);
+       if (retlen >= IFNAMSIZ) {
                ERROR("Host side veth device name returned by lxc-user-nic is "
                      "too long");
                return -E2BIG;
        }
-       strcpy(netdev->priv.veth_attr.veth1, token);
 
        /* netdev->priv.veth_attr.ifindex */
        token = strtok_r(NULL, ":", &saveptr);
@@ -2785,9 +2788,9 @@ static int lxc_setup_netdev_in_child_namespaces(struct lxc_netdev *netdev)
         */
        if (netdev->name[0] == '\0') {
                if (netdev->type == LXC_NET_PHYS)
-                       strcpy(netdev->name, netdev->link);
+                       (void)strlcpy(netdev->name, netdev->link, IFNAMSIZ);
                else
-                       strcpy(netdev->name, "eth%d");
+                       (void)strlcpy(netdev->name, "eth%d", IFNAMSIZ);
        }
 
        /* rename the interface name */
@@ -2813,7 +2816,7 @@ static int lxc_setup_netdev_in_child_namespaces(struct lxc_netdev *netdev)
         * name of the network device in the child's network namespace. We will
         * later on send this information back to the parent.
         */
-       strcpy(netdev->name, current_ifname);
+       (void)strlcpy(netdev->name, current_ifname, IFNAMSIZ);
 
        /* set a mac address */
        if (netdev->hwaddr) {