VServer 1.9.2 (patch-2.6.8.1-vs1.9.2.diff)
[linux-2.6.git] / drivers / net / eql.c
index 0ee18be..a53574b 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;
        };
@@ -395,7 +389,7 @@ static inline int eql_is_full(slave_queue_t *queue)
 static int __eql_insert_slave(slave_queue_t *queue, slave_t *slave)
 {
        if (!eql_is_full(queue)) {
-               slave_t *duplicate_slave = 0;
+               slave_t *duplicate_slave = NULL;
 
                duplicate_slave = __eql_find_slave_dev(queue, slave->dev);
                if (duplicate_slave != 0)
@@ -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;
@@ -501,8 +495,12 @@ static int eql_g_slave_cfg(struct net_device *dev, slave_config_t *scp)
                return -EFAULT;
 
        slave_dev = dev_get_by_name(sc.slave_name);
+       if (!slave_dev)
+               return -ENODEV;
 
        ret = -EINVAL;
+       if (!slave_dev)
+               return ret;
 
        spin_lock_bh(&eql->queue.lock);
        if (eql_is_slave(slave_dev)) {
@@ -522,7 +520,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;
@@ -533,11 +531,15 @@ static int eql_s_slave_cfg(struct net_device *dev, slave_config_t *scp)
        if (copy_from_user(&sc, scp, sizeof (slave_config_t)))
                return -EFAULT;
 
-       eql = dev->priv;
        slave_dev = dev_get_by_name(sc.slave_name);
+       if (!slave_dev)
+               return -ENODEV;
 
        ret = -EINVAL;
+       if (!slave_dev)
+               return ret;
 
+       eql = dev->priv;
        spin_lock_bh(&eql->queue.lock);
        if (eql_is_slave(slave_dev)) {
                slave = __eql_find_slave_dev(&eql->queue, slave_dev);
@@ -553,7 +555,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 +571,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;