diff options
Diffstat (limited to 'drivers/net/eql.c')
| -rw-r--r-- | drivers/net/eql.c | 24 | 
1 files changed, 15 insertions, 9 deletions
| diff --git a/drivers/net/eql.c b/drivers/net/eql.c index 74263f8efe1a..8ef34901c2d8 100644 --- a/drivers/net/eql.c +++ b/drivers/net/eql.c @@ -113,6 +113,7 @@  #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt +#include <linux/compat.h>  #include <linux/capability.h>  #include <linux/module.h>  #include <linux/kernel.h> @@ -131,7 +132,8 @@  static int eql_open(struct net_device *dev);  static int eql_close(struct net_device *dev); -static int eql_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd); +static int eql_siocdevprivate(struct net_device *dev, struct ifreq *ifr, +			      void __user *data, int cmd);  static netdev_tx_t eql_slave_xmit(struct sk_buff *skb, struct net_device *dev);  #define eql_is_slave(dev)	((dev->flags & IFF_SLAVE) == IFF_SLAVE) @@ -170,7 +172,7 @@ static const char version[] __initconst =  static const struct net_device_ops eql_netdev_ops = {  	.ndo_open	= eql_open,  	.ndo_stop	= eql_close, -	.ndo_do_ioctl	= eql_ioctl, +	.ndo_siocdevprivate = eql_siocdevprivate,  	.ndo_start_xmit	= eql_slave_xmit,  }; @@ -268,25 +270,29 @@ 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 __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) +static int eql_siocdevprivate(struct net_device *dev, struct ifreq *ifr, +			      void __user *data, int cmd)  {  	if (cmd != EQL_GETMASTRCFG && cmd != EQL_GETSLAVECFG &&  	    !capable(CAP_NET_ADMIN))  	  	return -EPERM; +	if (in_compat_syscall()) /* to be implemented */ +		return -EOPNOTSUPP; +  	switch (cmd) {  		case EQL_ENSLAVE: -			return eql_enslave(dev, ifr->ifr_data); +			return eql_enslave(dev, data);  		case EQL_EMANCIPATE: -			return eql_emancipate(dev, ifr->ifr_data); +			return eql_emancipate(dev, data);  		case EQL_GETSLAVECFG: -			return eql_g_slave_cfg(dev, ifr->ifr_data); +			return eql_g_slave_cfg(dev, data);  		case EQL_SETSLAVECFG: -			return eql_s_slave_cfg(dev, ifr->ifr_data); +			return eql_s_slave_cfg(dev, data);  		case EQL_GETMASTRCFG: -			return eql_g_master_cfg(dev, ifr->ifr_data); +			return eql_g_master_cfg(dev, data);  		case EQL_SETMASTRCFG: -			return eql_s_master_cfg(dev, ifr->ifr_data); +			return eql_s_master_cfg(dev, data);  		default:  			return -EOPNOTSUPP;  	} |