Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b5082083 authored by Justin Cormack's avatar Justin Cormack Committed by David S. Miller
Browse files

macvtap add missing ioctls - fix wrapping



The macvtap driver tries to emulate all the ioctls supported by a normal
tun/tap driver, however it was missing the generic SIOCGIFHWADDR and
SIOCSIFHWADDR ioctls to get and set the mac address that are supported
by tun/tap. This patch adds these.

Signed-off-by: default avatarJustin Cormack <justin@netbsd.org>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent a62b70dd
Loading
Loading
Loading
Loading
+29 −0
Original line number Diff line number Diff line
@@ -1101,6 +1101,35 @@ static long macvtap_ioctl(struct file *file, unsigned int cmd,
		rtnl_unlock();
		return ret;

	case SIOCGIFHWADDR:
		rtnl_lock();
		vlan = macvtap_get_vlan(q);
		if (!vlan) {
			rtnl_unlock();
			return -ENOLINK;
		}
		ret = 0;
		u = vlan->dev->type;
		if (copy_to_user(&ifr->ifr_name, vlan->dev->name, IFNAMSIZ) ||
		    copy_to_user(&ifr->ifr_hwaddr.sa_data, vlan->dev->dev_addr, ETH_ALEN) ||
		    put_user(u, &ifr->ifr_hwaddr.sa_family))
			ret = -EFAULT;
		macvtap_put_vlan(vlan);
		rtnl_unlock();
		return ret;

	case SIOCSIFHWADDR:
		rtnl_lock();
		vlan = macvtap_get_vlan(q);
		if (!vlan) {
			rtnl_unlock();
			return -ENOLINK;
		}
		ret = dev_set_mac_address(vlan->dev, &ifr->ifr_hwaddr);
		macvtap_put_vlan(vlan);
		rtnl_unlock();
		return ret;

	default:
		return -EINVAL;
	}