--- linux/net/core/dev.c.orig 2007-01-22 15:51:34.000000000 +0000 +++ linux/net/core/dev.c 2007-01-22 16:00:09.000000000 +0000 @@ -2333,10 +2333,11 @@ static int dev_ifsioc(struct ifreq *ifr, return dev_set_mtu(dev, ifr->ifr_mtu); case SIOCGIFHWADDR: - if ((size_t) dev->addr_len > sizeof ifr->ifr_hwaddr.sa_data) - return -EOVERFLOW; - memset(ifr->ifr_hwaddr.sa_data, 0, sizeof ifr->ifr_hwaddr.sa_data); - memcpy(ifr->ifr_hwaddr.sa_data, dev->dev_addr, dev->addr_len); + if (!dev->addr_len) + 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)); ifr->ifr_hwaddr.sa_family = dev->type; return 0;