From 1d15e6a34222cc8d8eb1050e7a3e276b0348be41 Mon Sep 17 00:00:00 2001 From: Phil Elwell Date: Mon, 3 Jul 2023 11:04:56 +0100 Subject: [PATCH] fixup! Allow mac address to be set in smsc95xx usbnet: smsc95xx: Fix indentation of smsc95xx_is_macaddr_param() smsc95xx_is_macaddr_param() is incorrectly indented, it uses 7 spaces instead of tabs. Fix it. Fixes: aac7b105788e ("Allow mac address to be set in smsc95xx") Signed-off-by: Philipp Rosenberger [lukas: fix netif_dbg() indentation as well, wordsmith commit message] Signed-off-by: Lukas Wunner usbnet: smsc95xx: Simplify MAC address parsing Parsing the MAC address provided on the kernel command line can be simplified quite a bit by taking advantage of the kernel's built-in mac_pton() helper. Likewise emitting the MAC address can be simplified with the %pM format string conversion. Signed-off-by: Lukas Wunner usbnet: smsc95xx: Fix style issues in smsc95xx_is_macaddr_param() It is bad practice to have a function named ..._is_...() which has side effects. So drop the 'is' from the name. Per kernel convention return 0 on success and a negative errno on failure. Validate the MAC address retrieved from the command line. Signed-off-by: Philipp Rosenberger [lukas: leave 2nd function parameter unchanged, wordsmith commit message] Signed-off-by: Lukas Wunner --- drivers/net/usb/smsc95xx.c | 61 +++++++++++--------------------------- 1 file changed, 17 insertions(+), 44 deletions(-) --- a/drivers/net/usb/smsc95xx.c +++ b/drivers/net/usb/smsc95xx.c @@ -814,49 +814,18 @@ static int smsc95xx_ioctl(struct net_dev } /* Check the macaddr module parameter for a MAC address */ -static int smsc95xx_is_macaddr_param(struct usbnet *dev, struct net_device *nd) +static int smsc95xx_macaddr_param(struct usbnet *dev, struct net_device *nd) { - int i, j, got_num, num; - u8 mtbl[ETH_ALEN]; + u8 mtbl[ETH_ALEN]; - if (macaddr[0] == ':') - return 0; - - i = 0; - j = 0; - num = 0; - got_num = 0; - while (j < ETH_ALEN) { - if (macaddr[i] && macaddr[i] != ':') { - got_num++; - if ('0' <= macaddr[i] && macaddr[i] <= '9') - num = num * 16 + macaddr[i] - '0'; - else if ('A' <= macaddr[i] && macaddr[i] <= 'F') - num = num * 16 + 10 + macaddr[i] - 'A'; - else if ('a' <= macaddr[i] && macaddr[i] <= 'f') - num = num * 16 + 10 + macaddr[i] - 'a'; - else - break; - i++; - } else if (got_num == 2) { - mtbl[j++] = (u8) num; - num = 0; - got_num = 0; - i++; - } else { - break; - } - } - - if (j == ETH_ALEN) { - netif_dbg(dev, ifup, dev->net, "Overriding MAC address with: " - "%02x:%02x:%02x:%02x:%02x:%02x\n", mtbl[0], mtbl[1], mtbl[2], - mtbl[3], mtbl[4], mtbl[5]); - dev_addr_mod(nd, 0, mtbl, ETH_ALEN); - return 1; - } else { - return 0; - } + 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) @@ -883,8 +852,12 @@ static void smsc95xx_init_mac_address(st } /* Check module parameters */ - if (smsc95xx_is_macaddr_param(dev, dev->net)) - return; + 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);