hippi: use ndo_siocdevprivate
authorArnd Bergmann <arnd@arndb.de>
Tue, 27 Jul 2021 13:45:07 +0000 (15:45 +0200)
committerDavid S. Miller <davem@davemloft.net>
Tue, 27 Jul 2021 19:11:44 +0000 (20:11 +0100)
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.

Cc: Jes Sorensen <jes@trained-monkey.org>
Cc: linux-hippi@sunsite.dk
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/hippi/rrunner.c
drivers/net/hippi/rrunner.h

index 2201038..7661dbb 100644 (file)
@@ -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 @@ out:
 }
 
 
-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;
        }
index 8753378..5537761 100644 (file)
@@ -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,