The 3com EEPROM has a checksum but unfortunately it seems that a zapped
EEPROM returning all zero values passes the checksum test fine and we try
and use it.
--- drivers/net/3c59x.c~ 2004-09-29 17:23:42.964453264 +0100
+++ drivers/net/3c59x.c 2004-09-29 17:28:40.358242536 +0100
@@ -1295,6 +1295,13 @@
for (i = 0; i < 6; i++)
printk("%c%2.2x", i ? ':' : ' ', dev->dev_addr[i]);
}
+ /* Unfortunately an all zero eeprom passes the checksum and this
+ gets found in the wild in failure cases. Crypto is hard 8) */
+ if (memcmp(dev->dev_addr, "\0\0\0\0\0", 6) == 0) {
+ retval = -EINVAL;
+ printk(KERN_ERR "*** EEPROM MAC address is invalid.\n");
+ goto free_ring; /* With every pack */
+ }
EL3WINDOW(2);
for (i = 0; i < 6; i++)
outb(dev->dev_addr[i], ioaddr + i);
On Wed, Sep 29, 2004 at 12:30:23PM -0400, Alan Cox wrote:
> The 3com EEPROM has a checksum but unfortunately it seems that a zapped
> EEPROM returning all zero values passes the checksum test fine and we try
> and use it.
>
>
> --- drivers/net/3c59x.c~ 2004-09-29 17:23:42.964453264 +0100
> +++ drivers/net/3c59x.c 2004-09-29 17:28:40.358242536 +0100
> @@ -1295,6 +1295,13 @@
> for (i = 0; i < 6; i++)
> printk("%c%2.2x", i ? ':' : ' ', dev->dev_addr[i]);
> }
> + /* Unfortunately an all zero eeprom passes the checksum and this
> + gets found in the wild in failure cases. Crypto is hard 8) */
> + if (memcmp(dev->dev_addr, "\0\0\0\0\0", 6) == 0) {
Shouldn't this be using is_valid_ether_addr() ?
--
Russell King
Linux kernel 2.6 ARM Linux - http://www.arm.linux.org.uk/
maintainer of: 2.6 PCMCIA - http://pcmcia.arm.linux.org.uk/
2.6 Serial core
Russell King wrote:
> On Wed, Sep 29, 2004 at 12:30:23PM -0400, Alan Cox wrote:
>
>>The 3com EEPROM has a checksum but unfortunately it seems that a zapped
>>EEPROM returning all zero values passes the checksum test fine and we try
>>and use it.
>>
>>
>>--- drivers/net/3c59x.c~ 2004-09-29 17:23:42.964453264 +0100
>>+++ drivers/net/3c59x.c 2004-09-29 17:28:40.358242536 +0100
>>@@ -1295,6 +1295,13 @@
>> for (i = 0; i < 6; i++)
>> printk("%c%2.2x", i ? ':' : ' ', dev->dev_addr[i]);
>> }
>>+ /* Unfortunately an all zero eeprom passes the checksum and this
>>+ gets found in the wild in failure cases. Crypto is hard 8) */
>>+ if (memcmp(dev->dev_addr, "\0\0\0\0\0", 6) == 0) {
>
>
> Shouldn't this be using is_valid_ether_addr() ?
Yes.
Jeff
On Mer, 2004-09-29 at 17:52, Jeff Garzik wrote:
> > Shouldn't this be using is_valid_ether_addr() ?
>
> Yes.
Fixed in my tree - want another diff ?
Alan Cox wrote:
> On Mer, 2004-09-29 at 17:52, Jeff Garzik wrote:
>
>>>Shouldn't this be using is_valid_ether_addr() ?
>>
>>Yes.
>
>
> Fixed in my tree - want another diff ?
pretty please :)
Jeff