From: Arnd Bergmann <a...@arndb.de>

The rr_ioctl uses private ioctl commands that correctly pass
all data through ifr_data, which works fine in compat mode.

Change it to use ndo_siocdevprivate as a cleanup.

Signed-off-by: Arnd Bergmann <a...@arndb.de>
---
 drivers/net/hippi/rrunner.c | 11 ++++++-----
 drivers/net/hippi/rrunner.h |  3 ++-
 2 files changed, 8 insertions(+), 6 deletions(-)

diff --git a/drivers/net/hippi/rrunner.c b/drivers/net/hippi/rrunner.c
index 22010384c4a3..7661dbb31162 100644
--- a/drivers/net/hippi/rrunner.c
+++ b/drivers/net/hippi/rrunner.c
@@ -63,7 +63,7 @@ static const char version[] =
 static const struct net_device_ops rr_netdev_ops = {
        .ndo_open               = rr_open,
        .ndo_stop               = rr_close,
-       .ndo_do_ioctl           = rr_ioctl,
+       .ndo_siocdevprivate     = rr_siocdevprivate,
        .ndo_start_xmit         = rr_start_xmit,
        .ndo_set_mac_address    = hippi_mac_addr,
 };
@@ -1568,7 +1568,8 @@ static int rr_load_firmware(struct net_device *dev)
 }
 
 
-static int rr_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
+static int rr_siocdevprivate(struct net_device *dev, struct ifreq *rq,
+                            void __user *data, int cmd)
 {
        struct rr_private *rrpriv;
        unsigned char *image, *oldimage;
@@ -1603,7 +1604,7 @@ static int rr_ioctl(struct net_device *dev, struct ifreq 
*rq, int cmd)
                        error = -EFAULT;
                        goto gf_out;
                }
-               error = copy_to_user(rq->ifr_data, image, EEPROM_BYTES);
+               error = copy_to_user(data, image, EEPROM_BYTES);
                if (error)
                        error = -EFAULT;
        gf_out:
@@ -1615,7 +1616,7 @@ static int rr_ioctl(struct net_device *dev, struct ifreq 
*rq, int cmd)
                        return -EPERM;
                }
 
-               image = memdup_user(rq->ifr_data, EEPROM_BYTES);
+               image = memdup_user(data, EEPROM_BYTES);
                if (IS_ERR(image))
                        return PTR_ERR(image);
 
@@ -1658,7 +1659,7 @@ static int rr_ioctl(struct net_device *dev, struct ifreq 
*rq, int cmd)
                return error;
 
        case SIOCRRID:
-               return put_user(0x52523032, (int __user *)rq->ifr_data);
+               return put_user(0x52523032, (int __user *)data);
        default:
                return error;
        }
diff --git a/drivers/net/hippi/rrunner.h b/drivers/net/hippi/rrunner.h
index 87533784604f..55377614e752 100644
--- a/drivers/net/hippi/rrunner.h
+++ b/drivers/net/hippi/rrunner.h
@@ -835,7 +835,8 @@ static int rr_open(struct net_device *dev);
 static netdev_tx_t rr_start_xmit(struct sk_buff *skb,
                                 struct net_device *dev);
 static int rr_close(struct net_device *dev);
-static int rr_ioctl(struct net_device *dev, struct ifreq *rq, int cmd);
+static int rr_siocdevprivate(struct net_device *dev, struct ifreq *rq,
+                            void __user *data, int cmd);
 static unsigned int rr_read_eeprom(struct rr_private *rrpriv,
                                   unsigned long offset,
                                   unsigned char *buf,
-- 
2.27.0

Reply via email to