diff options
author | Al Viro <viro@zeniv.linux.org.uk> | 2017-10-02 03:13:08 +0300 |
---|---|---|
committer | Al Viro <viro@zeniv.linux.org.uk> | 2018-01-25 03:13:45 +0300 |
commit | b1b0c245067268043e0e832432f3d537a5cae33b (patch) | |
tree | 7ded461ec00dc15af031544a1c5e8bbb3586902d /net/wireless/wext-core.c | |
parent | 4cf808e7ac32120b3db95d824acd52f586bfdd1d (diff) | |
download | linux-b1b0c245067268043e0e832432f3d537a5cae33b.tar.xz |
lift handling of SIOCIW... out of dev_ioctl()
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'net/wireless/wext-core.c')
-rw-r--r-- | net/wireless/wext-core.c | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/net/wireless/wext-core.c b/net/wireless/wext-core.c index 6cdb054484d6..9efbfc753347 100644 --- a/net/wireless/wext-core.c +++ b/net/wireless/wext-core.c @@ -1035,18 +1035,23 @@ static int ioctl_standard_call(struct net_device * dev, } -int wext_handle_ioctl(struct net *net, struct iwreq *iwr, unsigned int cmd, - void __user *arg) +int wext_handle_ioctl(struct net *net, unsigned int cmd, void __user *arg) { struct iw_request_info info = { .cmd = cmd, .flags = 0 }; + struct iwreq iwr; int ret; - ret = wext_ioctl_dispatch(net, iwr, cmd, &info, + if (copy_from_user(&iwr, arg, sizeof(iwr))) + return -EFAULT; + + iwr.ifr_name[sizeof(iwr.ifr_name) - 1] = 0; + + ret = wext_ioctl_dispatch(net, &iwr, cmd, &info, ioctl_standard_call, ioctl_private_call); if (ret >= 0 && IW_IS_GET(cmd) && - copy_to_user(arg, iwr, sizeof(struct iwreq))) + copy_to_user(arg, &iwr, sizeof(struct iwreq))) return -EFAULT; return ret; |