static int ethtool_get_perm_addr(struct net_device *dev, void *useraddr) 
static int ethtool_get_perm_addr(struct net_device *dev, void __user *useraddr) 
static int ethtool_get_perm_addr(struct net_device *dev, void *useraddr){	struct ethtool_perm_addr epaddr;	u8 *data;	int ret;	if (!dev->ethtool_ops->get_perm_addr)		return -EOPNOTSUPP;	if (copy_from_user(&epaddr,useraddr,sizeof(epaddr)))		return -EFAULT;	data = kmalloc(epaddr.size, GFP_USER);	if (!data)		return -ENOMEM;	ret = dev->ethtool_ops->get_perm_addr(dev,&epaddr,data);	if (ret)		return ret;	ret = -EFAULT;	if (copy_to_user(useraddr, &epaddr, sizeof(epaddr)))		goto out;	useraddr += sizeof(epaddr);	if (copy_to_user(useraddr, data, epaddr.size))		goto out;	ret = 0; out:	kfree(data);	return ret;}
4520	/local/tlutelli/issta_data/temp/c/2005_temp/2005/4520/0bf0519d2b531459009caab718b94fdf94d63d17/ethtool.c/buggy/net/core/ethtool.c