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

Commit efc61a34 authored by Jiri Pirko's avatar Jiri Pirko Committed by David S. Miller
Browse files

ethoc: fix mac address set



Function ethoc_set_mac_address() was incorrectly using passed pointer as
pointer to address, that is not correct.
Struct sockaddr have to be be used here.

Signed-off-by: default avatarJiri Pirko <jiri@resnulli.us>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent b681b65d
Loading
Loading
Loading
Loading
+11 −11
Original line number Diff line number Diff line
@@ -771,20 +771,24 @@ static int ethoc_config(struct net_device *dev, struct ifmap *map)
	return -ENOSYS;
}

static int ethoc_set_mac_address(struct net_device *dev, void *addr)
static void ethoc_do_set_mac_address(struct net_device *dev)
{
	struct ethoc *priv = netdev_priv(dev);
	u8 *mac = (u8 *)addr;

	if (!is_valid_ether_addr(mac))
		return -EADDRNOTAVAIL;
	unsigned char *mac = dev->dev_addr;

	ethoc_write(priv, MAC_ADDR0, (mac[2] << 24) | (mac[3] << 16) |
				     (mac[4] <<  8) | (mac[5] <<  0));
	ethoc_write(priv, MAC_ADDR1, (mac[0] <<  8) | (mac[1] <<  0));
}

	memcpy(dev->dev_addr, mac, ETH_ALEN);
static int ethoc_set_mac_address(struct net_device *dev, void *p)
{
	const struct sockaddr *addr = p;

	if (!is_valid_ether_addr(addr->sa_data))
		return -EADDRNOTAVAIL;
	memcpy(dev->dev_addr, addr->sa_data, ETH_ALEN);
	ethoc_do_set_mac_address(dev);
	return 0;
}

@@ -1060,11 +1064,7 @@ static int ethoc_probe(struct platform_device *pdev)
		random_mac = true;
	}

	ret = ethoc_set_mac_address(netdev, netdev->dev_addr);
	if (ret) {
		dev_err(&netdev->dev, "failed to set MAC address\n");
		goto error;
	}
	ethoc_do_set_mac_address(netdev);

	if (random_mac)
		netdev->addr_assign_type = NET_ADDR_RANDOM;