net: vlan: Avoid using strncpy()
authorKees Cook <keescook@chromium.org>
Wed, 2 Jun 2021 20:27:41 +0000 (13:27 -0700)
committerDavid S. Miller <davem@davemloft.net>
Thu, 3 Jun 2021 21:15:10 +0000 (14:15 -0700)
Use strscpy_pad() instead of strncpy() which is considered deprecated:
https://www.kernel.org/doc/html/latest/process/deprecated.html#strncpy-on-nul-terminated-strings

Signed-off-by: Kees Cook <keescook@chromium.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/8021q/vlan.c
net/8021q/vlan.h
net/8021q/vlan_dev.c

index fb3d326..4cdf841 100644 (file)
@@ -638,7 +638,8 @@ static int vlan_ioctl_handler(struct net *net, void __user *arg)
 
        case GET_VLAN_REALDEV_NAME_CMD:
                err = 0;
-               vlan_dev_get_realdev_name(dev, args.u.device2);
+               vlan_dev_get_realdev_name(dev, args.u.device2,
+                                         sizeof(args.u.device2));
                if (copy_to_user(arg, &args,
                                 sizeof(struct vlan_ioctl_args)))
                        err = -EFAULT;
index fa3ad3d..e3f6ff0 100644 (file)
@@ -129,7 +129,8 @@ void vlan_dev_set_ingress_priority(const struct net_device *dev,
 int vlan_dev_set_egress_priority(const struct net_device *dev,
                                 u32 skb_prio, u16 vlan_prio);
 int vlan_dev_change_flags(const struct net_device *dev, u32 flag, u32 mask);
-void vlan_dev_get_realdev_name(const struct net_device *dev, char *result);
+void vlan_dev_get_realdev_name(const struct net_device *dev, char *result,
+                              size_t size);
 
 int vlan_check_real_dev(struct net_device *real_dev,
                        __be16 protocol, u16 vlan_id,
index 4db3f06..a0367b3 100644 (file)
@@ -239,9 +239,9 @@ int vlan_dev_change_flags(const struct net_device *dev, u32 flags, u32 mask)
        return 0;
 }
 
-void vlan_dev_get_realdev_name(const struct net_device *dev, char *result)
+void vlan_dev_get_realdev_name(const struct net_device *dev, char *result, size_t size)
 {
-       strncpy(result, vlan_dev_priv(dev)->real_dev->name, 23);
+       strscpy_pad(result, vlan_dev_priv(dev)->real_dev->name, size);
 }
 
 bool vlan_dev_inherit_address(struct net_device *dev,
@@ -360,7 +360,7 @@ static int vlan_dev_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
        struct ifreq ifrr;
        int err = -EOPNOTSUPP;
 
-       strncpy(ifrr.ifr_name, real_dev->name, IFNAMSIZ);
+       strscpy_pad(ifrr.ifr_name, real_dev->name, IFNAMSIZ);
        ifrr.ifr_ifru = ifr->ifr_ifru;
 
        switch (cmd) {