diff options
author | Edward Cree <ecree@solarflare.com> | 2014-09-16 20:05:21 +0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2014-09-17 00:33:34 +0400 |
commit | f650fb456f2079b762c131a11397c0a966e2bfe4 (patch) | |
tree | 3e998d35f9b42155c24f268ad9aeb69ccf6854a2 /drivers/net/ethernet | |
parent | 929a031dfd62aae34bf8e728f712e6751e416d1f (diff) | |
download | linux-f650fb456f2079b762c131a11397c0a966e2bfe4.tar.xz |
sfc: fix addr_list_lock spinlock use before init
Reported by Nikolay Aleksandrov. In efx_init_port() we call
efx_mac_reconfigure() to work around a Falcon/A1 limitation, and this calls
efx_{arch}_filter_sync_rx_mode(), which takes the addr_list_lock; but this
lock is uninitialised, because we haven't called register_netdevice() yet.
So, in efx_farch_filter_sync_rx_mode(), check efx_dev_registered() before
doing anything else.
The EF10 equivalent, efx_ef10_filter_sync_rx_mode(), already has the
corresponding check.
Signed-off-by: Edward Cree <ecree@solarflare.com>
Tested-by: Nikolay Aleksandrov <nikolay@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/ethernet')
-rw-r--r-- | drivers/net/ethernet/sfc/farch.c | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/drivers/net/ethernet/sfc/farch.c b/drivers/net/ethernet/sfc/farch.c index 0537381cd2f6..6859437b59fb 100644 --- a/drivers/net/ethernet/sfc/farch.c +++ b/drivers/net/ethernet/sfc/farch.c @@ -2933,6 +2933,9 @@ void efx_farch_filter_sync_rx_mode(struct efx_nic *efx) u32 crc; int bit; + if (!efx_dev_registered(efx)) + return; + netif_addr_lock_bh(net_dev); efx->unicast_filter = !(net_dev->flags & IFF_PROMISC); |