• Arnd Bergmann's avatar
    nixge: fix mac address error handling again · a68229ca
    Arnd Bergmann authored
    The change to eth_hw_addr_set() caused gcc to correctly spot a
    bug that was introduced in an earlier incorrect fix:
    
    In file included from include/linux/etherdevice.h:21,
                     from drivers/net/ethernet/ni/nixge.c:7:
    In function '__dev_addr_set',
        inlined from 'eth_hw_addr_set' at include/linux/etherdevice.h:319:2,
        inlined from 'nixge_probe' at drivers/net/ethernet/ni/nixge.c:1286:3:
    include/linux/netdevice.h:4648:9: error: 'memcpy' reading 6 bytes from a region of size 0 [-Werror=stringop-overread]
     4648 |         memcpy(dev->dev_addr, addr, len);
          |         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    
    As nixge_get_nvmem_address() can return either NULL or an error
    pointer, the NULL check is wrong, and we can end up reading from
    ERR_PTR(-EOPNOTSUPP), which gcc knows to contain zero readable
    bytes.
    
    Make the function always return an error pointer again but fix
    the check to match that.
    
    Fixes: f3956ebb ("ethernet: use eth_hw_addr_set() instead of ether_addr_copy()")
    Fixes: abcd3d6f ("net: nixge: Fix error path for obtaining mac address")
    Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    a68229ca
nixge.c 38.1 KB