diff options
-rw-r--r-- | drivers/uwb/Kconfig | 1 | ||||
-rw-r--r-- | drivers/uwb/address.c | 14 |
2 files changed, 5 insertions, 10 deletions
diff --git a/drivers/uwb/Kconfig b/drivers/uwb/Kconfig index c204094e1bb4..afac2588dab4 100644 --- a/drivers/uwb/Kconfig +++ b/drivers/uwb/Kconfig @@ -5,6 +5,7 @@ menuconfig UWB tristate "Ultra Wideband devices" default n + select GENERIC_NET_UTILS help UWB is a high-bandwidth, low-power, point-to-point radio technology using a wide spectrum (3.1-10.6GHz). It is diff --git a/drivers/uwb/address.c b/drivers/uwb/address.c index 8739c4f4d015..2833be9cbc2a 100644 --- a/drivers/uwb/address.c +++ b/drivers/uwb/address.c @@ -336,23 +336,17 @@ static ssize_t uwb_rc_mac_addr_store(struct device *dev, struct uwb_mac_addr addr; ssize_t result; - result = sscanf(buf, "%hhx:%hhx:%hhx:%hhx:%hhx:%hhx\n", - &addr.data[0], &addr.data[1], &addr.data[2], - &addr.data[3], &addr.data[4], &addr.data[5]); - if (result != 6) { - result = -EINVAL; - goto out; - } + if (!mac_pton(buf, addr.data)) + return -EINVAL; if (is_multicast_ether_addr(addr.data)) { dev_err(&rc->uwb_dev.dev, "refusing to set multicast " "MAC address %s\n", buf); - result = -EINVAL; - goto out; + return -EINVAL; } result = uwb_rc_mac_addr_set(rc, &addr); if (result == 0) rc->uwb_dev.mac_addr = addr; -out: + return result < 0 ? result : size; } DEVICE_ATTR(mac_address, S_IRUGO | S_IWUSR, uwb_rc_mac_addr_show, uwb_rc_mac_addr_store); |