diff options
Diffstat (limited to 'drivers/net')
-rw-r--r-- | drivers/net/macvtap.c | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/drivers/net/macvtap.c b/drivers/net/macvtap.c index 60f7ee5fafbe..80fdb82352fa 100644 --- a/drivers/net/macvtap.c +++ b/drivers/net/macvtap.c | |||
@@ -999,7 +999,7 @@ static long macvtap_ioctl(struct file *file, unsigned int cmd, | |||
999 | void __user *argp = (void __user *)arg; | 999 | void __user *argp = (void __user *)arg; |
1000 | struct ifreq __user *ifr = argp; | 1000 | struct ifreq __user *ifr = argp; |
1001 | unsigned int __user *up = argp; | 1001 | unsigned int __user *up = argp; |
1002 | unsigned int u; | 1002 | unsigned short u; |
1003 | int __user *sp = argp; | 1003 | int __user *sp = argp; |
1004 | int s; | 1004 | int s; |
1005 | int ret; | 1005 | int ret; |
@@ -1014,7 +1014,7 @@ static long macvtap_ioctl(struct file *file, unsigned int cmd, | |||
1014 | if ((u & ~MACVTAP_FEATURES) != (IFF_NO_PI | IFF_TAP)) | 1014 | if ((u & ~MACVTAP_FEATURES) != (IFF_NO_PI | IFF_TAP)) |
1015 | ret = -EINVAL; | 1015 | ret = -EINVAL; |
1016 | else | 1016 | else |
1017 | q->flags = u; | 1017 | q->flags = (q->flags & ~MACVTAP_FEATURES) | u; |
1018 | 1018 | ||
1019 | return ret; | 1019 | return ret; |
1020 | 1020 | ||
@@ -1027,8 +1027,9 @@ static long macvtap_ioctl(struct file *file, unsigned int cmd, | |||
1027 | } | 1027 | } |
1028 | 1028 | ||
1029 | ret = 0; | 1029 | ret = 0; |
1030 | u = q->flags; | ||
1030 | if (copy_to_user(&ifr->ifr_name, vlan->dev->name, IFNAMSIZ) || | 1031 | if (copy_to_user(&ifr->ifr_name, vlan->dev->name, IFNAMSIZ) || |
1031 | put_user(q->flags, &ifr->ifr_flags)) | 1032 | put_user(u, &ifr->ifr_flags)) |
1032 | ret = -EFAULT; | 1033 | ret = -EFAULT; |
1033 | macvtap_put_vlan(vlan); | 1034 | macvtap_put_vlan(vlan); |
1034 | rtnl_unlock(); | 1035 | rtnl_unlock(); |