|
|
| version 1.1.1.12, 2001/05/30 03:46:51 | version 1.4, 2001/06/20 08:35:03 |
|---|---|
| Line 2072 static int dev_ifsioc(struct ifreq *ifr, | Line 2072 static int dev_ifsioc(struct ifreq *ifr, |
| return err; | return err; |
| case SIOCGIFHWADDR: | case SIOCGIFHWADDR: |
| memcpy(ifr->ifr_hwaddr.sa_data,dev->dev_addr, MAX_ADDR_LEN); | if (dev->addr_len < sizeof(ifr->ifr_hwaddr.sa_data)) |
| memcpy(ifr->ifr_hwaddr.sa_data, dev->dev_addr, dev->addr_len); | |
| else | |
| memcpy(ifr->ifr_hwaddr.sa_data, dev->dev_addr, sizeof(ifr->ifr_hwaddr.sa_data)); | |
| ifr->ifr_hwaddr.sa_family=dev->type; | ifr->ifr_hwaddr.sa_family=dev->type; |
| return 0; | return 0; |
| Line 2087 static int dev_ifsioc(struct ifreq *ifr, | Line 2090 static int dev_ifsioc(struct ifreq *ifr, |
| if (!err) | if (!err) |
| notifier_call_chain(&netdev_chain, NETDEV_CHANGEADDR, dev); | notifier_call_chain(&netdev_chain, NETDEV_CHANGEADDR, dev); |
| return err; | return err; |
| #ifdef SIOCGIFHWBROADCAST | |
| case SIOCGIFHWBROADCAST: | |
| if (dev->addr_len < sizeof(ifr->ifr_hwaddr.sa_data)) | |
| memcpy(ifr->ifr_hwaddr.sa_data, dev->broadcast, dev->addr_len); | |
| else | |
| memcpy(ifr->ifr_hwaddr.sa_data, dev->broadcast, sizeof(ifr->ifr_hwaddr.sa_data)); | |
| ifr->ifr_hwaddr.sa_family=dev->type; | |
| return 0; | |
| #endif | |
| case SIOCSIFHWBROADCAST: | case SIOCSIFHWBROADCAST: |
| if (ifr->ifr_hwaddr.sa_family!=dev->type) | if (ifr->ifr_hwaddr.sa_family!=dev->type) |
| return -EINVAL; | return -EINVAL; |
| memcpy(dev->broadcast, ifr->ifr_hwaddr.sa_data, MAX_ADDR_LEN); | if (dev->addr_len < sizeof(ifr->ifr_hwaddr.sa_data)) |
| memcpy(dev->broadcast, ifr->ifr_hwaddr.sa_data, dev->addr_len); | |
| else | |
| memcpy(dev->broadcast, ifr->ifr_hwaddr.sa_data, sizeof(ifr->ifr_hwaddr.sa_data)); | |
| notifier_call_chain(&netdev_chain, NETDEV_CHANGEADDR, dev); | notifier_call_chain(&netdev_chain, NETDEV_CHANGEADDR, dev); |
| return 0; | return 0; |