Skip to content

Commit

Permalink
Allow mac address to be set in smsc95xx
Browse files Browse the repository at this point in the history
Signed-off-by: popcornmix <[email protected]>

SQUASH: smsc95xx: Use dev_mod_addr to set MAC addr

Since adeef3e ("net: constify netdev->dev_addr") it has been
illegal to write to the dev_addr MAC address field. Later commits
have added explicit checks that it hasn't been modified by nefarious
means. The dev_addr_mod helper function is the accepted way to change
the dev_addr field, so use it.

Squash with 96c1def ("Allow mac address to be set in smsc95xx").

Signed-off-by: Phil Elwell <[email protected]>
  • Loading branch information
popcornmix committed Oct 23, 2024
1 parent 9a9692f commit 3519f47
Showing 1 changed file with 27 additions and 0 deletions.
27 changes: 27 additions & 0 deletions drivers/net/usb/smsc95xx.c
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,10 @@ static int packetsize = 2560;
module_param(packetsize, int, 0644);
MODULE_PARM_DESC(packetsize, "Override the RX URB packet size");

static char *macaddr = ":";
module_param(macaddr, charp, 0);
MODULE_PARM_DESC(macaddr, "MAC address");

static int __must_check smsc95xx_read_reg(struct usbnet *dev, u32 index,
u32 *data)
{
Expand Down Expand Up @@ -805,6 +809,21 @@ static int smsc95xx_ioctl(struct net_device *netdev, struct ifreq *rq, int cmd)
return phy_mii_ioctl(netdev->phydev, rq, cmd);
}

/* Check the macaddr module parameter for a MAC address */
static int smsc95xx_macaddr_param(struct usbnet *dev, struct net_device *nd)
{
u8 mtbl[ETH_ALEN];

if (mac_pton(macaddr, mtbl)) {
netif_dbg(dev, ifup, dev->net,
"Overriding MAC address with: %pM\n", mtbl);
dev_addr_mod(nd, 0, mtbl, ETH_ALEN);
return 0;
} else {
return -EINVAL;
}
}

static void smsc95xx_init_mac_address(struct usbnet *dev)
{
u8 addr[ETH_ALEN];
Expand All @@ -828,6 +847,14 @@ static void smsc95xx_init_mac_address(struct usbnet *dev)
}
}

/* Check module parameters */
if (smsc95xx_macaddr_param(dev, dev->net) == 0) {
if (is_valid_ether_addr(dev->net->dev_addr)) {
netif_dbg(dev, ifup, dev->net, "MAC address read from module parameter\n");
return;
}
}

/* no useful static MAC address found. generate a random one */
eth_hw_addr_random(dev->net);
netif_dbg(dev, ifup, dev->net, "MAC address set to eth_random_addr\n");
Expand Down

0 comments on commit 3519f47

Please sign in to comment.