Hi,

i noticed that strncpy wasn't used correctly here.
Please review/apply.

Patch follows:

>From the man page:
  [...]
    The strncpy() function is similar, except that at most n
    bytes of src are copied.  Warning: If there is no null byte
    among the first  n  bytes  of src, the string placed in dest
    will not be null-terminated.
  [...]

Signed-off-by: Frank Meerkötter <fr...@meerkoetter.org>
---
 system-linux.c |   16 ++++++++--------
 1 file changed, 8 insertions(+), 8 deletions(-)

diff --git a/system-linux.c b/system-linux.c
index eb73e95..17143cb 100644
--- a/system-linux.c
+++ b/system-linux.c
@@ -284,7 +284,7 @@ static int system_bridge_if(const char *bridge, struct 
device *dev, int cmd, voi
                ifr.ifr_ifindex = dev->ifindex;
        else
                ifr.ifr_data = data;
-       strncpy(ifr.ifr_name, bridge, sizeof(ifr.ifr_name));
+       strncpy(ifr.ifr_name, bridge, sizeof(ifr.ifr_name) - 1);
        return ioctl(sock_ioctl, cmd, &ifr);
 }
 
@@ -345,7 +345,7 @@ int system_bridge_delif(struct device *bridge, struct 
device *dev)
 static int system_if_resolve(struct device *dev)
 {
        struct ifreq ifr;
-       strncpy(ifr.ifr_name, dev->ifname, sizeof(ifr.ifr_name));
+       strncpy(ifr.ifr_name, dev->ifname, sizeof(ifr.ifr_name) - 1);
        if (!ioctl(sock_ioctl, SIOCGIFINDEX, &ifr))
                return ifr.ifr_ifindex;
        else
@@ -357,7 +357,7 @@ static int system_if_flags(const char *ifname, unsigned 
add, unsigned rem)
        struct ifreq ifr;
 
        memset(&ifr, 0, sizeof(ifr));
-       strncpy(ifr.ifr_name, ifname, sizeof(ifr.ifr_name));
+       strncpy(ifr.ifr_name, ifname, sizeof(ifr.ifr_name) - 1);
        ioctl(sock_ioctl, SIOCGIFFLAGS, &ifr);
        ifr.ifr_flags |= add;
        ifr.ifr_flags &= ~rem;
@@ -599,7 +599,7 @@ static int system_vlan(struct device *dev, int id)
                ifr.cmd = ADD_VLAN_CMD;
                ifr.u.VID = id;
        }
-       strncpy(ifr.device1, dev->ifname, sizeof(ifr.device1));
+       strncpy(ifr.device1, dev->ifname, sizeof(ifr.device1) - 1);
        return ioctl(sock_ioctl, SIOCSIFVLAN, &ifr);
 }
 
@@ -619,7 +619,7 @@ system_if_get_settings(struct device *dev, struct 
device_settings *s)
        struct ifreq ifr;
 
        memset(&ifr, 0, sizeof(ifr));
-       strncpy(ifr.ifr_name, dev->ifname, sizeof(ifr.ifr_name));
+       strncpy(ifr.ifr_name, dev->ifname, sizeof(ifr.ifr_name) - 1);
 
        if (ioctl(sock_ioctl, SIOCGIFMTU, &ifr) == 0) {
                s->mtu = ifr.ifr_mtu;
@@ -643,7 +643,7 @@ system_if_apply_settings(struct device *dev, struct 
device_settings *s)
        struct ifreq ifr;
 
        memset(&ifr, 0, sizeof(ifr));
-       strncpy(ifr.ifr_name, dev->ifname, sizeof(ifr.ifr_name));
+       strncpy(ifr.ifr_name, dev->ifname, sizeof(ifr.ifr_name) - 1);
        if (s->flags & DEV_OPT_MTU) {
                ifr.ifr_mtu = s->mtu;
                if (ioctl(sock_ioctl, SIOCSIFMTU, &ifr) < 0)
@@ -1010,7 +1010,7 @@ static int tunnel_ioctl(const char *name, int cmd, void 
*p)
        struct ifreq ifr;
 
        memset(&ifr, 0, sizeof(ifr));
-       strncpy(ifr.ifr_name, name, sizeof(ifr.ifr_name));
+       strncpy(ifr.ifr_name, name, sizeof(ifr.ifr_name) - 1);
        ifr.ifr_ifru.ifru_data = p;
        return ioctl(sock_ioctl, cmd, &ifr);
 }
@@ -1073,7 +1073,7 @@ int system_add_ip_tunnel(const char *name, struct 
blob_attr *attr)
                p.iph.ttl = val;
        }
 
-       strncpy(p.name, name, sizeof(p.name));
+       strncpy(p.name, name, sizeof(p.name) - 1);
        if (tunnel_ioctl(base, SIOCADDTUNNEL, &p) < 0)
                return -1;
 
-- 
1.7.10.4

_______________________________________________
openwrt-devel mailing list
openwrt-devel@lists.openwrt.org
https://lists.openwrt.org/mailman/listinfo/openwrt-devel

Reply via email to