]> git.hungrycats.org Git - linux/commitdiff
[PATCH] sparse: the rest of ifr_data cleanups and annotations
authorAlexander Viro <viro@parcelfarce.linux.theplanet.co.uk>
Fri, 4 Jun 2004 07:10:51 +0000 (00:10 -0700)
committerLinus Torvalds <torvalds@ppc970.osdl.org>
Fri, 4 Jun 2004 07:10:51 +0000 (00:10 -0700)
The rest of ->ifr_data cleanups.  A bunch of drivers use address
of ifr->ifr_ifru, but spell that as &ifr->ifr_data, which expands to
&ifr->ifr_ifru.ifru_data.  ifr_ifru is a union and in effect they sneak in
a private field into that union; ifr_ifru.ifru_data is a field in that
union and it has nothing to do with the things they want to do.  Cleaned
up by explicit use of &ifr->ifr_ifru.

Several places where we really use ->ifr_data (i.e. use its value
and use it as __user pointer) annotated.

28 files changed:
drivers/net/appletalk/cops.c
drivers/net/appletalk/ipddp.c
drivers/net/au1000_eth.c
drivers/net/depca.c
drivers/net/dl2k.c
drivers/net/eql.c
drivers/net/ewrk3.c
drivers/net/ewrk3.h
drivers/net/hamachi.c
drivers/net/hamradio/baycom_par.c
drivers/net/hamradio/baycom_ser_fdx.c
drivers/net/hamradio/baycom_ser_hdx.c
drivers/net/ibm_emac/ibm_emac_core.c
drivers/net/pcmcia/3c574_cs.c
drivers/net/pcmcia/axnet_cs.c
drivers/net/pcmcia/pcnet_cs.c
drivers/net/pcmcia/xirc2ps_cs.c
drivers/net/plip.c
drivers/net/sb1000.c
drivers/net/sb1250-mac.c
drivers/net/shaper.c
drivers/net/tulip/de4x5.c
drivers/net/tulip/xircom_tulip_cb.c
drivers/net/wan/pc300_drv.c
drivers/net/wan/sbni.c
drivers/usb/net/pegasus.c
drivers/usb/net/rtl8150.c
net/core/ethtool.c

index db21e0c41f5aeb8a872d5d962c023480fb58ff06..925dd04774fa1b25635427f46847e92e70dcda09 100644 (file)
@@ -524,7 +524,7 @@ static void cops_reset(struct net_device *dev, int sleep)
 static void cops_load (struct net_device *dev)
 {
         struct ifreq ifr;
-        struct ltfirmware *ltf= (struct ltfirmware *)&ifr.ifr_data;
+        struct ltfirmware *ltf= (struct ltfirmware *)&ifr.ifr_ifru;
         struct cops_local *lp = netdev_priv(dev);
         int ioaddr=dev->base_addr;
        int length, i = 0;
index 8c0a962d538f0862d90c8d8504a40b21d9b7ef91..8bf0bba6276afeb296bcf21c2ebf2383efbe4adb 100644 (file)
@@ -259,7 +259,7 @@ static struct ipddp_route* ipddp_find_route(struct ipddp_route *rt)
 
 static int ipddp_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
 {
-        struct ipddp_route *rt = (struct ipddp_route *)ifr->ifr_data;
+        struct ipddp_route __user *rt = ifr->ifr_data;
         struct ipddp_route rcp;
 
         if(!capable(CAP_NET_ADMIN))
index 2bd0ac9594e5f96d8fbecd981fefbaa56447d68b..afcdcffc7847c3559905ac23b835c082494e087f 100644 (file)
@@ -1269,7 +1269,7 @@ static void set_rx_mode(struct net_device *dev)
 
 static int au1000_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
 {
-       u16 *data = (u16 *)&rq->ifr_data;
+       u16 *data = (u16 *)&rq->ifr_ifru;
 
        /* fixme */
        switch(cmd) { 
index 80e8617dcb2c3e0cac6cef9e99e457fc3cfe8de3..5d62a032b8c876af6b046f09037e061b31c68b30 100644 (file)
@@ -1937,7 +1937,7 @@ static void depca_dbg_open(struct net_device *dev)
 static int depca_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
 {
        struct depca_private *lp = (struct depca_private *) dev->priv;
-       struct depca_ioctl *ioc = (struct depca_ioctl *) &rq->ifr_data;
+       struct depca_ioctl *ioc = (struct depca_ioctl *) &rq->ifr_ifru;
        int i, status = 0;
        u_long ioaddr = dev->base_addr;
        union {
index c12485146336013cb57765c2c0e35aa0cacc5bc9..39cabaf802dd615170b6b920513ed2b52a160167 100644 (file)
@@ -1325,7 +1325,7 @@ rio_ioctl (struct net_device *dev, struct ifreq *rq, int cmd)
 {
        int phy_addr;
        struct netdev_private *np = dev->priv;
-       struct mii_data *miidata = (struct mii_data *) &rq->ifr_data;
+       struct mii_data *miidata = (struct mii_data *) &rq->ifr_ifru;
        
        struct netdev_desc *desc;
        int i;
index 0ee18be4a1e03fae0de536aac3b481d88fb09d10..816534011d8012b4af8fee80750fe8f5b1585983 100644 (file)
@@ -255,14 +255,14 @@ static int eql_close(struct net_device *dev)
        return 0;
 }
 
-static int eql_enslave(struct net_device *dev,  slaving_request_t *srq);
-static int eql_emancipate(struct net_device *dev, slaving_request_t *srq);
+static int eql_enslave(struct net_device *dev,  slaving_request_t __user *srq);
+static int eql_emancipate(struct net_device *dev, slaving_request_t __user *srq);
 
-static int eql_g_slave_cfg(struct net_device *dev, slave_config_t *sc);
-static int eql_s_slave_cfg(struct net_device *dev, slave_config_t *sc);
+static int eql_g_slave_cfg(struct net_device *dev, slave_config_t __user *sc);
+static int eql_s_slave_cfg(struct net_device *dev, slave_config_t __user *sc);
 
-static int eql_g_master_cfg(struct net_device *dev, master_config_t *mc);
-static int eql_s_master_cfg(struct net_device *dev, master_config_t *mc);
+static int eql_g_master_cfg(struct net_device *dev, master_config_t __user *mc);
+static int eql_s_master_cfg(struct net_device *dev, master_config_t __user *mc);
 
 static int eql_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
 {  
@@ -272,23 +272,17 @@ static int eql_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
 
        switch (cmd) {
                case EQL_ENSLAVE:
-                       return eql_enslave(dev,
-                                          (slaving_request_t *) ifr->ifr_data);
+                       return eql_enslave(dev, ifr->ifr_data);
                case EQL_EMANCIPATE:
-                       return eql_emancipate(dev,
-                                             (slaving_request_t *) ifr->ifr_data);
+                       return eql_emancipate(dev, ifr->ifr_data);
                case EQL_GETSLAVECFG:
-                       return eql_g_slave_cfg(dev,
-                                              (slave_config_t *) ifr->ifr_data);
+                       return eql_g_slave_cfg(dev, ifr->ifr_data);
                case EQL_SETSLAVECFG:
-                       return eql_s_slave_cfg(dev,
-                                              (slave_config_t *) ifr->ifr_data);
+                       return eql_s_slave_cfg(dev, ifr->ifr_data);
                case EQL_GETMASTRCFG:
-                       return eql_g_master_cfg(dev,
-                                               (master_config_t *) ifr->ifr_data);
+                       return eql_g_master_cfg(dev, ifr->ifr_data);
                case EQL_SETMASTRCFG:
-                       return eql_s_master_cfg(dev,
-                                               (master_config_t *) ifr->ifr_data);
+                       return eql_s_master_cfg(dev, ifr->ifr_data);
                default:
                        return -EOPNOTSUPP;
        };
@@ -411,7 +405,7 @@ static int __eql_insert_slave(slave_queue_t *queue, slave_t *slave)
        return -ENOSPC;
 }
 
-static int eql_enslave(struct net_device *master_dev, slaving_request_t *srqp)
+static int eql_enslave(struct net_device *master_dev, slaving_request_t __user *srqp)
 {
        struct net_device *slave_dev;
        slaving_request_t srq;
@@ -457,7 +451,7 @@ static int eql_enslave(struct net_device *master_dev, slaving_request_t *srqp)
        return -EINVAL;
 }
 
-static int eql_emancipate(struct net_device *master_dev, slaving_request_t *srqp)
+static int eql_emancipate(struct net_device *master_dev, slaving_request_t __user *srqp)
 {
        equalizer_t *eql = master_dev->priv;
        struct net_device *slave_dev;
@@ -489,7 +483,7 @@ static int eql_emancipate(struct net_device *master_dev, slaving_request_t *srqp
        return ret;
 }
 
-static int eql_g_slave_cfg(struct net_device *dev, slave_config_t *scp)
+static int eql_g_slave_cfg(struct net_device *dev, slave_config_t __user *scp)
 {
        equalizer_t *eql = dev->priv;
        slave_t *slave;
@@ -522,7 +516,7 @@ static int eql_g_slave_cfg(struct net_device *dev, slave_config_t *scp)
        return ret;
 }
 
-static int eql_s_slave_cfg(struct net_device *dev, slave_config_t *scp)
+static int eql_s_slave_cfg(struct net_device *dev, slave_config_t __user *scp)
 {
        slave_t *slave;
        equalizer_t *eql;
@@ -553,7 +547,7 @@ static int eql_s_slave_cfg(struct net_device *dev, slave_config_t *scp)
        return ret;
 }
 
-static int eql_g_master_cfg(struct net_device *dev, master_config_t *mcp)
+static int eql_g_master_cfg(struct net_device *dev, master_config_t __user *mcp)
 {
        equalizer_t *eql;
        master_config_t mc;
@@ -569,7 +563,7 @@ static int eql_g_master_cfg(struct net_device *dev, master_config_t *mcp)
        return -EINVAL;
 }
 
-static int eql_s_master_cfg(struct net_device *dev, master_config_t *mcp)
+static int eql_s_master_cfg(struct net_device *dev, master_config_t __user *mcp)
 {
        equalizer_t *eql;
        master_config_t mc;
index 8c4b2a88b1899b56a4fc0816656866dc18fa7bf0..eb9f346d14d608d260216bea94b4c07eede1f037 100644 (file)
@@ -1707,7 +1707,7 @@ static int ewrk3_ethtool_ioctl(struct net_device *dev, void __user *useraddr)
 static int ewrk3_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
 {
        struct ewrk3_private *lp = (struct ewrk3_private *) dev->priv;
-       struct ewrk3_ioctl *ioc = (struct ewrk3_ioctl *) &rq->ifr_data;
+       struct ewrk3_ioctl *ioc = (struct ewrk3_ioctl *) &rq->ifr_ifru;
        u_long iobase = dev->base_addr;
        int i, j, status = 0;
        u_char csr;
index 46ec009965c52838351d9764b9cd76ad753aa3d1..fb74bd053672fbaadf123ae0177e5ea4b8fc2037 100644 (file)
 struct ewrk3_ioctl {
        unsigned short cmd;                /* Command to run */
        unsigned short len;                /* Length of the data buffer */
-       unsigned char  *data;              /* Pointer to the data buffer */
+       unsigned char  __user *data;       /* Pointer to the data buffer */
 };
 
 /* 
index 32fe8e5311ccd37dfccdc1166804e513bce51189..f1ec806659eb378a55edfddd479e4fbfdea5403c 100644 (file)
@@ -1947,7 +1947,7 @@ static int netdev_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
                rc = netdev_ethtool_ioctl(dev, rq->ifr_data);
 
        else if (cmd == (SIOCDEVPRIVATE+3)) { /* set rx,tx intr params */
-               u32 *d = (u32 *)&rq->ifr_data;
+               u32 *d = (u32 *)&rq->ifr_ifru;
                /* Should add this check here or an ordinary user can do nasty
                 * things. -KDU
                 *
index 28e9da3db48110a9945a9494e41a2ae661508378..4bd7c09656d831511405cbc60f96cd9126468e8d 100644 (file)
@@ -414,7 +414,6 @@ static int baycom_ioctl(struct net_device *dev, struct ifreq *ifr,
 {
        struct baycom_state *bc;
        struct baycom_ioctl bi;
-       int cmd2;
 
        if (!dev || !dev->priv ||
            ((struct baycom_state *)dev->priv)->hdrv.magic != HDLCDRV_MAGIC) {
@@ -425,8 +424,6 @@ static int baycom_ioctl(struct net_device *dev, struct ifreq *ifr,
 
        if (cmd != SIOCDEVPRIVATE)
                return -ENOIOCTLCMD;
-       if (get_user(cmd2, (int *)ifr->ifr_data))
-               return -EFAULT;
        switch (hi->cmd) {
        default:
                break;
index 2dc64f049b4a17d53f14ad99d4e76e40be516a30..5c6257ee5361e5474c0300673153a7d004b30a50 100644 (file)
@@ -529,7 +529,6 @@ static int baycom_ioctl(struct net_device *dev, struct ifreq *ifr,
 {
        struct baycom_state *bc;
        struct baycom_ioctl bi;
-       int cmd2;
 
        if (!dev || !dev->priv ||
            ((struct baycom_state *)dev->priv)->hdrv.magic != HDLCDRV_MAGIC) {
@@ -540,8 +539,6 @@ static int baycom_ioctl(struct net_device *dev, struct ifreq *ifr,
 
        if (cmd != SIOCDEVPRIVATE)
                return -ENOIOCTLCMD;
-       if (get_user(cmd2, (int *)ifr->ifr_data))
-               return -EFAULT;
        switch (hi->cmd) {
        default:
                break;
index f288c9241f95fe64e65701ec4d9addd953e25c31..4aef97039b9c518d8c473ccac8ddefe485749341 100644 (file)
@@ -569,7 +569,6 @@ static int baycom_ioctl(struct net_device *dev, struct ifreq *ifr,
 {
        struct baycom_state *bc;
        struct baycom_ioctl bi;
-       int cmd2;
 
        if (!dev || !dev->priv ||
            ((struct baycom_state *)dev->priv)->hdrv.magic != HDLCDRV_MAGIC) {
@@ -580,8 +579,6 @@ static int baycom_ioctl(struct net_device *dev, struct ifreq *ifr,
 
        if (cmd != SIOCDEVPRIVATE)
                return -ENOIOCTLCMD;
-       if (get_user(cmd2, (int *)ifr->ifr_data))
-               return -EFAULT;
        switch (hi->cmd) {
        default:
                break;
index 0bc7f82421fbc19a331cdb62dbe4beafe135b389..2ca3de076ccf7e7cee109621d8a17777d01b8472 100644 (file)
@@ -1556,7 +1556,7 @@ static struct ethtool_ops emac_ethtool_ops = {
 static int emac_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
 {
        struct ocp_enet_private *fep = dev->priv;
-       uint *data = (uint *) & rq->ifr_data;
+       uint *data = (uint *) & rq->ifr_ifru;
 
        switch (cmd) {
        case SIOCGMIIPHY:
index 47a102fd67a909210f6778b9beda06c10734e029..59d80ebbe88c8278e65cf4470d87be0333fcffc6 100644 (file)
@@ -1196,7 +1196,7 @@ static int el3_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
 {
        struct el3_private *lp = netdev_priv(dev);
        ioaddr_t ioaddr = dev->base_addr;
-       u16 *data = (u16 *)&rq->ifr_data;
+       u16 *data = (u16 *)&rq->ifr_ifru;
        int phy = lp->phys & 0x1f;
 
        DEBUG(2, "%s: In ioct(%-.6s, %#4.4x) %4.4x %4.4x %4.4x %4.4x.\n",
index 9a46c5626116f2894d00c8e5f75b99ab45584867..ea5a88cf73e63c77b60cd0ccee937809895723d2 100644 (file)
@@ -778,7 +778,7 @@ static struct ethtool_ops netdev_ethtool_ops = {
 static int axnet_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
 {
     axnet_dev_t *info = PRIV(dev);
-    u16 *data = (u16 *)&rq->ifr_data;
+    u16 *data = (u16 *)&rq->ifr_ifru;
     ioaddr_t mii_addr = dev->base_addr + AXNET_MII_EEP;
     switch (cmd) {
     case SIOCGMIIPHY:
index d073093dd644612103e0690bf44a585efd5d7a09..b53f5fcf5d12caf44e8594e456de20d25a18f0db 100644 (file)
@@ -1281,7 +1281,7 @@ static struct ethtool_ops netdev_ethtool_ops = {
 static int ei_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
 {
     pcnet_dev_t *info = PRIV(dev);
-    u16 *data = (u16 *)&rq->ifr_data;
+    u16 *data = (u16 *)&rq->ifr_ifru;
     ioaddr_t mii_addr = dev->base_addr + DLINK_GPIO;
     switch (cmd) {
     case SIOCGMIIPHY:
index 5671f1234ade870410c00973eabb4a22d53d944a..d4cc269029df508615159b73003c15107cebeec4 100644 (file)
@@ -1681,7 +1681,7 @@ do_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
 {
     local_info_t *local = netdev_priv(dev);
     ioaddr_t ioaddr = dev->base_addr;
-    u16 *data = (u16 *)&rq->ifr_data;
+    u16 *data = (u16 *)&rq->ifr_ifru;
 
     DEBUG(1, "%s: ioctl(%-.6s, %#04x) %04x %04x %04x %04x\n",
          dev->name, rq->ifr_ifrn.ifrn_name, cmd,
index 31bbff4f0f3552cc1108916ef35c4b5dfc260175..43f923c963c9f699330e7962f44df556118eed72 100644 (file)
@@ -1217,7 +1217,7 @@ static int
 plip_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
 {
        struct net_local *nl = netdev_priv(dev);
-       struct plipconf *pc = (struct plipconf *) &rq->ifr_data;
+       struct plipconf *pc = (struct plipconf *) &rq->ifr_ifru;
 
        if (cmd != SIOCDEVPLIP)
                return -EOPNOTSUPP;
index ea2d89155417ee546d0a7ca658d7455a548f27ed..8ac2d810913f52b9bc222d238a702c19b62b961e 100644 (file)
@@ -1031,14 +1031,14 @@ static int sb1000_dev_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
        case SIOCGCMFREQUENCY:          /* get frequency */
                if ((status = sb1000_get_frequency(ioaddr, name, &frequency)))
                        return status;
-               if(put_user(frequency, (int*) ifr->ifr_data))
+               if(put_user(frequency, (int __user *) ifr->ifr_data))
                        return -EFAULT;
                break;
 
        case SIOCSCMFREQUENCY:          /* set frequency */
                if (!capable(CAP_NET_ADMIN))
                        return -EPERM;
-               if(get_user(frequency, (int*) ifr->ifr_data))
+               if(get_user(frequency, (int __user *) ifr->ifr_data))
                        return -EFAULT;
                if ((status = sb1000_set_frequency(ioaddr, name, frequency)))
                        return status;
index 0b15d6513ef50fc27e90c3ad2c945b4ed6f90c36..7914167acc8f954e77da3bad5529ea3b779b0c6d 100644 (file)
@@ -2721,7 +2721,7 @@ static void sbmac_set_rx_mode(struct net_device *dev)
 static int sbmac_mii_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
 {
        struct sbmac_softc *sc = netdev_priv(dev);
-       u16 *data = (u16 *)&rq->ifr_data;
+       u16 *data = (u16 *)&rq->ifr_ifru;
        unsigned long flags;
        int retval;
        
index 9352fc63c262b8e47ac30b5ec53c9e5fd92eeefb..2351e186af24e6adbb68096d068b6a0632de2d04 100644 (file)
@@ -579,7 +579,7 @@ static int shaper_attach(struct net_device *shdev, struct shaper *sh, struct net
 
 static int shaper_ioctl(struct net_device *dev,  struct ifreq *ifr, int cmd)
 {
-       struct shaperconf *ss= (struct shaperconf *)&ifr->ifr_data;
+       struct shaperconf *ss= (struct shaperconf *)&ifr->ifr_ifru;
        struct shaper *sh=dev->priv;
        
        if(ss->ss_cmd == SHAPER_SET_DEV || ss->ss_cmd == SHAPER_SET_SPEED)
index 3fb06e5cb2e5cfc90e9d858e230dee3280cebe37..d59d46ecd2bf0a379fc261c38d613564e406afaf 100644 (file)
@@ -5535,7 +5535,7 @@ static int
 de4x5_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
 {
     struct de4x5_private *lp = netdev_priv(dev);
-    struct de4x5_ioctl *ioc = (struct de4x5_ioctl *) &rq->ifr_data;
+    struct de4x5_ioctl *ioc = (struct de4x5_ioctl *) &rq->ifr_ifru;
     u_long iobase = dev->base_addr;
     int i, j, status = 0;
     s32 omr;
index b4b990129d26e5eee1ae3f3be26b76ca4514b944..a01cc1b09c4a790f7ce4cf269352adfed16f82c2 100644 (file)
@@ -1471,7 +1471,7 @@ static int xircom_ethtool_ioctl(struct net_device *dev, void __user *useraddr)
 static int xircom_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
 {
        struct xircom_private *tp = dev->priv;
-       u16 *data = (u16 *)&rq->ifr_data;
+       u16 *data = (u16 *)&rq->ifr_ifru;
        int phy = tp->phys[0] & 0x1f;
        unsigned long flags;
 
index 05aa310d36106d10dbcf4acab8d1155fdef6a634..29b82687b50d429933a73c8f5e1b3befc96eb11b 100644 (file)
@@ -2542,7 +2542,7 @@ int cpc_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
        pc300conf_t conf_aux;
        pc300chconf_t *conf = (pc300chconf_t *) & chan->conf;
        int ch = chan->channel;
-       void *arg = (void *) ifr->ifr_data;
+       void __user *arg = ifr->ifr_data;
        struct if_settings *settings = &ifr->ifr_settings;
        uclong scabase = card->hw.scabase;
 
index e61774aefe2d5beb47386533a56d294cee6a4b8e..311ac346fb3e30bca185806967c8e49adc07772b 100644 (file)
@@ -1342,7 +1342,7 @@ sbni_ioctl( struct net_device  *dev,  struct ifreq  *ifr,  int  cmd )
                        return  -EPERM;
 
                spin_lock( &nl->lock );
-               flags = *(struct sbni_flags*) &ifr->ifr_data;
+               flags = *(struct sbni_flags*) &ifr->ifr_ifru;
                if( flags.fixed_rxl )
                        nl->delta_rxl = 0,
                        nl->cur_rxl_index = flags.rxl;
index 4cdcab3b851724381be25debab76a99be0d6f5ae..5142d8a070b4ab818d81620e6b2b8208d5ea88f5 100644 (file)
@@ -1030,7 +1030,7 @@ static int pegasus_ethtool_ioctl(struct net_device *net, void __user *uaddr)
        int cmd;
 
        pegasus = net->priv;
-       if (get_user(cmd, (int *) uaddr))
+       if (get_user(cmd, (int __user *) uaddr))
                return -EFAULT;
        switch (cmd) {
        case ETHTOOL_GDRVINFO:{
@@ -1107,7 +1107,7 @@ static int pegasus_ethtool_ioctl(struct net_device *net, void __user *uaddr)
 #endif
 static int pegasus_ioctl(struct net_device *net, struct ifreq *rq, int cmd)
 {
-       __u16 *data = (__u16 *) & rq->ifr_data;
+       __u16 *data = (__u16 *) & rq->ifr_ifru;
        pegasus_t *pegasus = net->priv;
        int res;
 
index 45d594717281d6ecdea683f1da27c94307001649..2be3eba6b089870cbdd3d89d0a80d4c28f70dd9f 100644 (file)
@@ -856,7 +856,7 @@ static int rtl8150_ioctl(struct net_device *netdev, struct ifreq *rq, int cmd)
        int res;
 
        dev = netdev->priv;
-       data = (u16 *) & rq->ifr_data;
+       data = (u16 *) & rq->ifr_ifru;
        res = 0;
 
        switch (cmd) {
index 9925b81609d4a1d732d01e9c1b84c5217b765724..a3b760687ffb7c26ae92ece1661e6293627f41f3 100644 (file)
@@ -650,7 +650,7 @@ static int ethtool_get_stats(struct net_device *dev, void __user *useraddr)
 int dev_ethtool(struct ifreq *ifr)
 {
        struct net_device *dev = __dev_get_by_name(ifr->ifr_name);
-       void __user *useraddr = (void __user *) ifr->ifr_data;
+       void __user *useraddr = ifr->ifr_data;
        u32 ethcmd;
 
        /*