From: Daniel Wagner <[email protected]>

ifr_name is a null terminated buffer, therefore we should
only copy IFNAMSIZ - 1 characters.

While we are at it we also use sizeof() consistenlty.

Reported by coverity.
---
 src/6to4.c |  8 ++++----
 src/inet.c | 10 +++++-----
 src/rtnl.c |  2 +-
 3 files changed, 10 insertions(+), 10 deletions(-)

diff --git a/src/6to4.c b/src/6to4.c
index ea4d7f8..463d2da 100644
--- a/src/6to4.c
+++ b/src/6to4.c
@@ -77,9 +77,9 @@ static int tunnel_create(struct in_addr *addr)
        p.iph.protocol = IPPROTO_IPV6;
        p.iph.saddr = addr->s_addr;
        p.iph.ttl = 64;
-       strncpy(p.name, "tun6to4", IFNAMSIZ);
+       strncpy(p.name, "tun6to4", sizeof(p.name) - 1);
 
-       strncpy(ifr.ifr_name, "sit0", IFNAMSIZ);
+       strncpy(ifr.ifr_name, "sit0", sizeof(ifr.ifr_name) - 1);
        ifr.ifr_ifru.ifru_data = (void *)&p;
        fd = socket(AF_INET, SOCK_DGRAM | SOCK_CLOEXEC, 0);
        ret = ioctl(fd, SIOCADDTUNNEL, &ifr);
@@ -109,9 +109,9 @@ static void tunnel_destroy(void)
        p.iph.version = 4;
        p.iph.ihl = 5;
        p.iph.protocol = IPPROTO_IPV6;
-       strncpy(p.name, "tun6to4", IFNAMSIZ);
+       strncpy(p.name, "tun6to4", sizeof(p.name) - 1);
 
-       strncpy(ifr.ifr_name, "tun6to4", IFNAMSIZ);
+       strncpy(ifr.ifr_name, "tun6to4", sizeof(ifr.ifr_name) - 1);
        ifr.ifr_ifru.ifru_data = (void *)&p;
        fd = socket(AF_INET, SOCK_DGRAM | SOCK_CLOEXEC, 0);
        if (fd < 0) {
diff --git a/src/inet.c b/src/inet.c
index 8f204b7..ae81ab3 100644
--- a/src/inet.c
+++ b/src/inet.c
@@ -203,7 +203,7 @@ int connman_inet_ifindex(const char *name)
                return -1;
 
        memset(&ifr, 0, sizeof(ifr));
-       strncpy(ifr.ifr_name, name, sizeof(ifr.ifr_name));
+       strncpy(ifr.ifr_name, name, sizeof(ifr.ifr_name) - 1);
 
        err = ioctl(sk, SIOCGIFINDEX, &ifr);
 
@@ -336,7 +336,7 @@ int connman_inet_ifdown(int index)
        }
 
        memset(&addr_ifr, 0, sizeof(addr_ifr));
-       memcpy(&addr_ifr.ifr_name, &ifr.ifr_name, sizeof(ifr.ifr_name));
+       memcpy(&addr_ifr.ifr_name, &ifr.ifr_name, sizeof(ifr.ifr_name) - 1);
        addr = (struct sockaddr_in *)&addr_ifr.ifr_addr;
        addr->sin_family = AF_INET;
        if (ioctl(sk, SIOCSIFADDR, &addr_ifr) < 0)
@@ -1106,7 +1106,7 @@ int connman_inet_remove_from_bridge(int index, const char 
*bridge)
        }
 
        memset(&ifr, 0, sizeof(ifr));
-       strncpy(ifr.ifr_name, bridge, IFNAMSIZ - 1);
+       strncpy(ifr.ifr_name, bridge, sizeof(ifr.ifr_name) - 1);
        ifr.ifr_ifindex = index;
 
        if (ioctl(sk, SIOCBRDELIF, &ifr) < 0)
@@ -1137,7 +1137,7 @@ int connman_inet_add_to_bridge(int index, const char 
*bridge)
        }
 
        memset(&ifr, 0, sizeof(ifr));
-       strncpy(ifr.ifr_name, bridge, IFNAMSIZ - 1);
+       strncpy(ifr.ifr_name, bridge, sizeof(ifr.ifr_name) - 1);
        ifr.ifr_ifindex = index;
 
        if (ioctl(sk, SIOCBRADDIF, &ifr) < 0)
@@ -1196,7 +1196,7 @@ int connman_inet_setup_tunnel(char *tunnel, int mtu)
                goto done;
 
        memset(&ifr, 0, sizeof(ifr));
-       strncpy(ifr.ifr_name, tunnel, IFNAMSIZ);
+       strncpy(ifr.ifr_name, tunnel, sizeof(ifr.ifr_name) - 1);
        err = ioctl(sk, SIOCGIFFLAGS, &ifr);
        if (err)
                goto done;
diff --git a/src/rtnl.c b/src/rtnl.c
index 80a6edc..6b89c48 100644
--- a/src/rtnl.c
+++ b/src/rtnl.c
@@ -104,7 +104,7 @@ static bool wext_interface(char *ifname)
                return false;
 
        memset(&wrq, 0, sizeof(wrq));
-       strncpy(wrq.ifr_name, ifname, IFNAMSIZ);
+       strncpy(wrq.ifr_name, ifname, sizeof(wrq.ifr_name) - 1);
 
        err = ioctl(fd, SIOCGIWNAME, &wrq);
 
-- 
1.8.4.474.g128a96c

_______________________________________________
connman mailing list
[email protected]
https://lists.connman.net/mailman/listinfo/connman

Reply via email to