Commit 4747c1a8 authored by Arnd Bergmann's avatar Arnd Bergmann Committed by David S. Miller

phonet: use siocdevprivate

phonet has a single private ioctl that is broken in compat
mode on big-endian machines today because the data returned
from it is never copied back to user space.

Move it over to the ndo_siocdevprivate callback, which also
fixes the compat issue.

Cc: Remi Denis-Courmont <courmisch@gmail.com>
Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
Acked-by: default avatarRémi Denis-Courmont <courmisch@gmail.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 561d8352
...@@ -253,7 +253,8 @@ static int usbpn_close(struct net_device *dev) ...@@ -253,7 +253,8 @@ static int usbpn_close(struct net_device *dev)
return usb_set_interface(pnd->usb, num, !pnd->active_setting); return usb_set_interface(pnd->usb, num, !pnd->active_setting);
} }
static int usbpn_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) static int usbpn_siocdevprivate(struct net_device *dev, struct ifreq *ifr,
void __user *data, int cmd)
{ {
struct if_phonet_req *req = (struct if_phonet_req *)ifr; struct if_phonet_req *req = (struct if_phonet_req *)ifr;
...@@ -269,7 +270,7 @@ static const struct net_device_ops usbpn_ops = { ...@@ -269,7 +270,7 @@ static const struct net_device_ops usbpn_ops = {
.ndo_open = usbpn_open, .ndo_open = usbpn_open,
.ndo_stop = usbpn_close, .ndo_stop = usbpn_close,
.ndo_start_xmit = usbpn_xmit, .ndo_start_xmit = usbpn_xmit,
.ndo_do_ioctl = usbpn_ioctl, .ndo_siocdevprivate = usbpn_siocdevprivate,
}; };
static void usbpn_setup(struct net_device *dev) static void usbpn_setup(struct net_device *dev)
......
...@@ -233,11 +233,11 @@ static int phonet_device_autoconf(struct net_device *dev) ...@@ -233,11 +233,11 @@ static int phonet_device_autoconf(struct net_device *dev)
struct if_phonet_req req; struct if_phonet_req req;
int ret; int ret;
if (!dev->netdev_ops->ndo_do_ioctl) if (!dev->netdev_ops->ndo_siocdevprivate)
return -EOPNOTSUPP; return -EOPNOTSUPP;
ret = dev->netdev_ops->ndo_do_ioctl(dev, (struct ifreq *)&req, ret = dev->netdev_ops->ndo_siocdevprivate(dev, (struct ifreq *)&req,
SIOCPNGAUTOCONF); NULL, SIOCPNGAUTOCONF);
if (ret < 0) if (ret < 0)
return ret; return ret;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment