diff options
Diffstat (limited to 'net/core/dev_ioctl.c')
| -rw-r--r-- | net/core/dev_ioctl.c | 5 | 
1 files changed, 5 insertions, 0 deletions
diff --git a/net/core/dev_ioctl.c b/net/core/dev_ioctl.c index 82fd4c9c4a1b..709a4e6fb447 100644 --- a/net/core/dev_ioctl.c +++ b/net/core/dev_ioctl.c @@ -28,6 +28,7 @@ static int dev_ifname(struct net *net, struct ifreq __user *arg)  	if (copy_from_user(&ifr, arg, sizeof(struct ifreq)))  		return -EFAULT; +	ifr.ifr_name[IFNAMSIZ-1] = 0;  	error = netdev_get_name(net, ifr.ifr_name, ifr.ifr_ifindex);  	if (error) @@ -262,6 +263,8 @@ static int dev_ifsioc(struct net *net, struct ifreq *ifr, unsigned int cmd)  		return dev_set_mtu(dev, ifr->ifr_mtu);  	case SIOCSIFHWADDR: +		if (dev->addr_len > sizeof(struct sockaddr)) +			return -EINVAL;  		return dev_set_mac_address(dev, &ifr->ifr_hwaddr);  	case SIOCSIFHWBROADCAST: @@ -424,6 +427,8 @@ int dev_ioctl(struct net *net, unsigned int cmd, void __user *arg)  		if (copy_from_user(&iwr, arg, sizeof(iwr)))  			return -EFAULT; +		iwr.ifr_name[sizeof(iwr.ifr_name) - 1] = 0; +  		return wext_handle_ioctl(net, &iwr, cmd, arg);  	}  |