|
|
|
@ -142,10 +142,12 @@ static int dev_ifsioc_locked(struct net *net, struct ifreq *ifr, unsigned int cm |
|
|
|
|
|
|
|
|
|
case SIOCGIFHWADDR: |
|
|
|
|
if (!dev->addr_len) |
|
|
|
|
memset(ifr->ifr_hwaddr.sa_data, 0, sizeof ifr->ifr_hwaddr.sa_data); |
|
|
|
|
memset(ifr->ifr_hwaddr.sa_data, 0, |
|
|
|
|
sizeof(ifr->ifr_hwaddr.sa_data)); |
|
|
|
|
else |
|
|
|
|
memcpy(ifr->ifr_hwaddr.sa_data, dev->dev_addr, |
|
|
|
|
min(sizeof ifr->ifr_hwaddr.sa_data, (size_t) dev->addr_len)); |
|
|
|
|
min(sizeof(ifr->ifr_hwaddr.sa_data), |
|
|
|
|
(size_t)dev->addr_len)); |
|
|
|
|
ifr->ifr_hwaddr.sa_family = dev->type; |
|
|
|
|
return 0; |
|
|
|
|
|
|
|
|
@ -265,7 +267,8 @@ static int dev_ifsioc(struct net *net, struct ifreq *ifr, unsigned int cmd) |
|
|
|
|
if (ifr->ifr_hwaddr.sa_family != dev->type) |
|
|
|
|
return -EINVAL; |
|
|
|
|
memcpy(dev->broadcast, ifr->ifr_hwaddr.sa_data, |
|
|
|
|
min(sizeof ifr->ifr_hwaddr.sa_data, (size_t) dev->addr_len)); |
|
|
|
|
min(sizeof(ifr->ifr_hwaddr.sa_data), |
|
|
|
|
(size_t)dev->addr_len)); |
|
|
|
|
call_netdevice_notifiers(NETDEV_CHANGEADDR, dev); |
|
|
|
|
return 0; |
|
|
|
|
|
|
|
|
|