diff options
author | Stijn Tintel <stijn@linux-ipv6.be> | 2022-12-08 00:57:08 +0200 |
---|---|---|
committer | Stijn Tintel <stijn@linux-ipv6.be> | 2022-12-08 00:57:08 +0200 |
commit | 02ada7a28b9390625d29aad6308f623df930342a (patch) | |
tree | 7a508b08ad81c5976343c7685a1c700ee8e395fd | |
parent | 86586994c97ca99d2da57224575d4a28760725e2 (diff) | |
download | netifd-staging/stintel/ifnamsiz.tar.gz |
treewide: fix use of IFNAMSIZstaging/stintel/ifnamsiz
IFNAMSIZ already includes an extra byte for the null character
terminating the string. Adding an extra byte can cause the interface
name to be truncated, resulting in undefined behaviour.
Drop the extra byte. For the bonding case, the interface name written to
sysfs should be prefixed with + or - so we do need an extra byte.
Signed-off-by: Stijn Tintel <stijn@linux-ipv6.be>
-rw-r--r-- | device.h | 2 | ||||
-rw-r--r-- | iprule.h | 4 | ||||
-rw-r--r-- | system-linux.c | 2 | ||||
-rw-r--r-- | vlan.c | 4 |
4 files changed, 6 insertions, 6 deletions
@@ -219,7 +219,7 @@ struct device { struct vlist_tree vlans; struct kvlist vlan_aliases; - char ifname[IFNAMSIZ + 1]; + char ifname[IFNAMSIZ]; int ifindex; struct blob_attr *config; @@ -77,8 +77,8 @@ struct iprule { struct interface_user out_iface_user; /* device name */ - char in_dev[IFNAMSIZ + 1]; - char out_dev[IFNAMSIZ + 1]; + char in_dev[IFNAMSIZ]; + char out_dev[IFNAMSIZ]; /* everything below is used as avl tree key */ /* don't change the order */ diff --git a/system-linux.c b/system-linux.c index 0f13a99..9fe869f 100644 --- a/system-linux.c +++ b/system-linux.c @@ -1030,7 +1030,7 @@ int system_bonding_set_port(struct device *dev, struct device *port, bool add, b { const char *port_name = port->ifname; const char op_ch = add ? '+' : '-'; - char buf[IFNAMSIZ + 2]; + char buf[IFNAMSIZ + 1]; snprintf(buf, sizeof(buf), "%c%s", op_ch, port_name); system_if_down(port); @@ -128,7 +128,7 @@ static int vlan_set_device_state(struct device *dev, bool up) static void vlan_dev_cb(struct device_user *dep, enum device_event ev) { - char name[IFNAMSIZ + 1]; + char name[IFNAMSIZ]; struct vlan_device *vldev; vldev = container_of(dep, struct vlan_device, dep); @@ -175,7 +175,7 @@ static struct device *get_vlan_device(struct device *dev, char *id_str, bool cre }; struct vlan_device *vldev; struct device_user *dep; - char name[IFNAMSIZ + 1]; + char name[IFNAMSIZ]; char *err = NULL; int id, *alias_id; |