Loading include/net/wext.h +2 −2 Original line number Diff line number Diff line Loading @@ -7,7 +7,7 @@ struct net; #ifdef CONFIG_WEXT_CORE int wext_handle_ioctl(struct net *net, struct iwreq *iwr, unsigned int cmd, int wext_handle_ioctl(struct net *net, unsigned int cmd, void __user *arg); int compat_wext_handle_ioctl(struct net *net, unsigned int cmd, unsigned long arg); Loading @@ -15,7 +15,7 @@ int compat_wext_handle_ioctl(struct net *net, unsigned int cmd, struct iw_statistics *get_wireless_stats(struct net_device *dev); int call_commit_handler(struct net_device *dev); #else static inline int wext_handle_ioctl(struct net *net, struct iwreq *iwr, unsigned int cmd, static inline int wext_handle_ioctl(struct net *net, unsigned int cmd, void __user *arg) { return -EINVAL; Loading net/core/dev_ioctl.c +0 −18 Original line number Diff line number Diff line Loading @@ -411,24 +411,6 @@ int dev_ioctl(struct net *net, unsigned int cmd, void __user *arg) if (cmd == SIOCGIFNAME) return dev_ifname(net, (struct ifreq __user *)arg); /* * Take care of Wireless Extensions. Unfortunately struct iwreq * isn't a proper subset of struct ifreq (it's 8 byte shorter) * so we need to treat it specially, otherwise applications may * fault if the struct they're passing happens to land at the * end of a mapped page. */ if (cmd >= SIOCIWFIRST && cmd <= SIOCIWLAST) { struct iwreq iwr; if (copy_from_user(&iwr, arg, sizeof(iwr))) return -EFAULT; iwr.ifr_name[sizeof(iwr.ifr_name) - 1] = 0; return wext_handle_ioctl(net, &iwr, cmd, arg); } if (copy_from_user(&ifr, arg, sizeof(struct ifreq))) return -EFAULT; Loading net/socket.c +1 −1 Original line number Diff line number Diff line Loading @@ -1005,7 +1005,7 @@ static long sock_ioctl(struct file *file, unsigned cmd, unsigned long arg) } else #ifdef CONFIG_WEXT_CORE if (cmd >= SIOCIWFIRST && cmd <= SIOCIWLAST) { err = dev_ioctl(net, cmd, argp); err = wext_handle_ioctl(net, cmd, argp); } else #endif switch (cmd) { Loading net/wireless/wext-core.c +9 −4 Original line number Diff line number Diff line Loading @@ -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; Loading Loading
include/net/wext.h +2 −2 Original line number Diff line number Diff line Loading @@ -7,7 +7,7 @@ struct net; #ifdef CONFIG_WEXT_CORE int wext_handle_ioctl(struct net *net, struct iwreq *iwr, unsigned int cmd, int wext_handle_ioctl(struct net *net, unsigned int cmd, void __user *arg); int compat_wext_handle_ioctl(struct net *net, unsigned int cmd, unsigned long arg); Loading @@ -15,7 +15,7 @@ int compat_wext_handle_ioctl(struct net *net, unsigned int cmd, struct iw_statistics *get_wireless_stats(struct net_device *dev); int call_commit_handler(struct net_device *dev); #else static inline int wext_handle_ioctl(struct net *net, struct iwreq *iwr, unsigned int cmd, static inline int wext_handle_ioctl(struct net *net, unsigned int cmd, void __user *arg) { return -EINVAL; Loading
net/core/dev_ioctl.c +0 −18 Original line number Diff line number Diff line Loading @@ -411,24 +411,6 @@ int dev_ioctl(struct net *net, unsigned int cmd, void __user *arg) if (cmd == SIOCGIFNAME) return dev_ifname(net, (struct ifreq __user *)arg); /* * Take care of Wireless Extensions. Unfortunately struct iwreq * isn't a proper subset of struct ifreq (it's 8 byte shorter) * so we need to treat it specially, otherwise applications may * fault if the struct they're passing happens to land at the * end of a mapped page. */ if (cmd >= SIOCIWFIRST && cmd <= SIOCIWLAST) { struct iwreq iwr; if (copy_from_user(&iwr, arg, sizeof(iwr))) return -EFAULT; iwr.ifr_name[sizeof(iwr.ifr_name) - 1] = 0; return wext_handle_ioctl(net, &iwr, cmd, arg); } if (copy_from_user(&ifr, arg, sizeof(struct ifreq))) return -EFAULT; Loading
net/socket.c +1 −1 Original line number Diff line number Diff line Loading @@ -1005,7 +1005,7 @@ static long sock_ioctl(struct file *file, unsigned cmd, unsigned long arg) } else #ifdef CONFIG_WEXT_CORE if (cmd >= SIOCIWFIRST && cmd <= SIOCIWLAST) { err = dev_ioctl(net, cmd, argp); err = wext_handle_ioctl(net, cmd, argp); } else #endif switch (cmd) { Loading
net/wireless/wext-core.c +9 −4 Original line number Diff line number Diff line Loading @@ -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; Loading