|
@@ -3162,6 +3162,7 @@ static int __hdd_set_mac_address(struct net_device *dev, void *addr)
|
|
|
struct sockaddr *psta_mac_addr = addr;
|
|
|
QDF_STATUS qdf_ret_status = QDF_STATUS_SUCCESS;
|
|
|
int ret;
|
|
|
+ struct qdf_mac_addr mac_addr;
|
|
|
|
|
|
ENTER_DEV(dev);
|
|
|
|
|
@@ -3170,6 +3171,23 @@ static int __hdd_set_mac_address(struct net_device *dev, void *addr)
|
|
|
if (0 != ret)
|
|
|
return ret;
|
|
|
|
|
|
+ qdf_mem_copy(&mac_addr, psta_mac_addr->sa_data, sizeof(mac_addr));
|
|
|
+
|
|
|
+ if (qdf_is_macaddr_zero(&mac_addr)) {
|
|
|
+ hdd_err("MAC is all zero");
|
|
|
+ return -EINVAL;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (qdf_is_macaddr_broadcast(&mac_addr)) {
|
|
|
+ hdd_err("MAC is Broadcast");
|
|
|
+ return -EINVAL;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (ETHER_IS_MULTICAST(psta_mac_addr->sa_data)) {
|
|
|
+ hdd_err("MAC is Multicast");
|
|
|
+ return -EINVAL;
|
|
|
+ }
|
|
|
+
|
|
|
memcpy(&adapter->mac_addr, psta_mac_addr->sa_data, ETH_ALEN);
|
|
|
memcpy(dev->dev_addr, psta_mac_addr->sa_data, ETH_ALEN);
|
|
|
|