fix missing copy_from_user in macvtap
authorJustin Cormack <justin@myriabit.com>
Wed, 13 May 2015 18:19:02 +0000 (19:19 +0100)
committerDavid S. Miller <davem@davemloft.net>
Wed, 13 May 2015 18:21:36 +0000 (14:21 -0400)
Fix missing copy_from_user in macvtap SIOCSIFHWADDR ioctl.

Signed-off-by: Justin Cormack <justin@netbsd.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/macvtap.c

index c8a23896d54e103178df3ad2a41128be8ed6bf53..483afb19596ce04bf931ccf2e97aa476fa738082 100644 (file)
@@ -1006,6 +1006,7 @@ static long macvtap_ioctl(struct file *file, unsigned int cmd,
        unsigned int __user *up = argp;
        unsigned short u;
        int __user *sp = argp;
+       struct sockaddr sa;
        int s;
        int ret;
 
@@ -1119,13 +1120,15 @@ static long macvtap_ioctl(struct file *file, unsigned int cmd,
                return ret;
 
        case SIOCSIFHWADDR:
+               if (copy_from_user(&sa, &ifr->ifr_hwaddr, sizeof(sa)))
+                       return -EFAULT;
                rtnl_lock();
                vlan = macvtap_get_vlan(q);
                if (!vlan) {
                        rtnl_unlock();
                        return -ENOLINK;
                }
-               ret = dev_set_mac_address(vlan->dev, &ifr->ifr_hwaddr);
+               ret = dev_set_mac_address(vlan->dev, &sa);
                macvtap_put_vlan(vlan);
                rtnl_unlock();
                return ret;