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 <[email protected]>
---
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
[email protected]
https://lists.openwrt.org/mailman/listinfo/openwrt-devel