summarylogtreecommitdiffstats
path: root/legacy-wireless-ioctls-4.9+.patch
diff options
context:
space:
mode:
Diffstat (limited to 'legacy-wireless-ioctls-4.9+.patch')
-rw-r--r--legacy-wireless-ioctls-4.9+.patch79
1 files changed, 79 insertions, 0 deletions
diff --git a/legacy-wireless-ioctls-4.9+.patch b/legacy-wireless-ioctls-4.9+.patch
new file mode 100644
index 00000000000..715325283ff
--- /dev/null
+++ b/legacy-wireless-ioctls-4.9+.patch
@@ -0,0 +1,79 @@
+fix: ioctl[RTL_IOCTL_HOSTAPD]: Operation not supported
+from: https://github.com/lwfinger/rtl8188eu/issues/257
+author: Ablinne
+url: https://pastebin.com/2nmLS4d6
+
+--- src_orig/archlinux-linux/net/wireless/wext-core.c 2018-12-07 15:55:27.385876108 +0100
++++ src/archlinux-linux/net/wireless/wext-core.c 2018-12-07 13:40:56.138049613 +0100
+@@ -912,12 +912,13 @@
+ * Main IOCTl dispatcher.
+ * Check the type of IOCTL and call the appropriate wrapper...
+ */
+-static int wireless_process_ioctl(struct net *net, struct iwreq *iwr,
++static int wireless_process_ioctl(struct net *net, struct ifreq *ifr,
+ unsigned int cmd,
+ struct iw_request_info *info,
+ wext_ioctl_func standard,
+ wext_ioctl_func private)
+ {
++ struct iwreq *iwr = (struct iwreq *) ifr;
+ struct net_device *dev;
+ iw_handler handler;
+
+@@ -925,7 +926,7 @@
+ * The copy_to/from_user() of ifr is also dealt with in there */
+
+ /* Make sure the device exist */
+- if ((dev = __dev_get_by_name(net, iwr->ifr_name)) == NULL)
++ if ((dev = __dev_get_by_name(net, ifr->ifr_name)) == NULL)
+ return -ENODEV;
+
+ /* A bunch of special cases, then the generic case...
+@@ -954,6 +955,9 @@
+ else if (private)
+ return private(dev, iwr, cmd, info, handler);
+ }
++ /* Old driver API : call driver ioctl handler */
++ if (dev->netdev_ops->ndo_do_ioctl)
++ return dev->netdev_ops->ndo_do_ioctl(dev, ifr, cmd);
+ return -EOPNOTSUPP;
+ }
+
+@@ -971,7 +975,7 @@
+ }
+
+ /* entry point from dev ioctl */
+-static int wext_ioctl_dispatch(struct net *net, struct iwreq *iwr,
++static int wext_ioctl_dispatch(struct net *net, struct ifreq *ifr,
+ unsigned int cmd, struct iw_request_info *info,
+ wext_ioctl_func standard,
+ wext_ioctl_func private)
+@@ -981,9 +985,9 @@
+ if (ret)
+ return ret;
+
+- dev_load(net, iwr->ifr_name);
++ dev_load(net, ifr->ifr_name);
+ rtnl_lock();
+- ret = wireless_process_ioctl(net, iwr, cmd, info, standard, private);
++ ret = wireless_process_ioctl(net, ifr, cmd, info, standard, private);
+ rtnl_unlock();
+
+ return ret;
+@@ -1044,7 +1048,7 @@
+
+ iwr.ifr_name[sizeof(iwr.ifr_name) - 1] = 0;
+
+- ret = wext_ioctl_dispatch(net, &iwr, cmd, &info,
++ ret = wext_ioctl_dispatch(net, (struct ifreq *) &iwr, cmd, &info,
+ ioctl_standard_call,
+ ioctl_private_call);
+ if (ret >= 0 &&
+@@ -1106,7 +1110,7 @@
+ info.cmd = cmd;
+ info.flags = IW_REQUEST_FLAG_COMPAT;
+
+- ret = wext_ioctl_dispatch(net, &iwr, cmd, &info,
++ ret = wext_ioctl_dispatch(net, (struct ifreq *) &iwr, cmd, &info,
+ compat_standard_call,
+ compat_private_call);