• Grant Grundler's avatar
    [netdrvr] tulip_read_eeprom fixes for BUG 4420 · 209261c0
    Grant Grundler authored
    If "location" is > "addr_len" bits, the high bits of location would interfere
    with the READ_CMD sent to the eeprom controller.
    
    A patch was submitted to bug:
        http://bugzilla.kernel.org/show_bug.cgi?id=4420
    
    which simply truncated the "location", read whatever was in "location
    modulo addr_len", and returned that value. That avoids confusing the
    eeprom but seems like the wrong solution to me.
    
    Correct would be to not read beyond "1 << addr_len" address of the eeprom.
    I am submitting two changes to implement this:
    1) tulip_read_eeprom will return zero (since we can't return -EINVAL)
       if this is attempted (defensive programming).
    2) In tulip_core.c, fix the tulip_read_eeprom caller so they don't
       iterate past addr_len bits and make sure the entire tp->eeprom[]
       array is cleared.
    
    I konw we don't strictly need both. I would prefer both in the tree
    since it documents the issue and provides a second "defense" from
    the bug from creeping back in.
    Signed-off-by: default avatarGrant Grundler <grundler@parisc-linux.org>
    Signed-off-by: default avatarJeff Garzik <jeff@garzik.org>
    209261c0
eeprom.c 12.4 KB