diff options
author | stephen hemminger <stephen@networkplumber.org> | 2017-03-16 22:21:32 +0300 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2017-03-17 07:35:33 +0300 |
commit | e14b4db7a567ff507453ecd9c64da51bbc2b6d23 (patch) | |
tree | 848ad14f3144221ffdfc0e91901e11dae7dfdfc8 /drivers/net/hyperv | |
parent | d12c917691b45d9dffcfe7c2362d25caa40905fd (diff) | |
download | linux-e14b4db7a567ff507453ecd9c64da51bbc2b6d23.tar.xz |
netvsc: fix race during initialization
When device is being setup on boot, there is a small race where
network device callback is registered, but the netvsc_device pointer
is not set yet. This can cause a NULL ptr dereference if packet
arrives during this window.
Fixes: 46b4f7f5d1f7 ("netvsc: eliminate per-device outstanding send counter")
Signed-off-by: Stephen Hemminger <sthemmin@microsoft.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/hyperv')
-rw-r--r-- | drivers/net/hyperv/netvsc.c | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/drivers/net/hyperv/netvsc.c b/drivers/net/hyperv/netvsc.c index 4c1d8cca247b..8dd0b8770328 100644 --- a/drivers/net/hyperv/netvsc.c +++ b/drivers/net/hyperv/netvsc.c @@ -1231,8 +1231,11 @@ void netvsc_channel_cb(void *context) return; net_device = net_device_to_netvsc_device(ndev); - if (unlikely(net_device->destroy) && - netvsc_channel_idle(net_device, q_idx)) + if (unlikely(!net_device)) + return; + + if (unlikely(net_device->destroy && + netvsc_channel_idle(net_device, q_idx))) return; /* commit_rd_index() -> hv_signal_on_read() needs this. */ |