netvsc: add rcu_read locking to netvsc callback
Subsystems (3)
PATCH v2 1/1 netvsc: add rcu_read locking to netvsc callback
The receive callback (in tasklet context) is using RCU to get reference to associated VF network device but this is not safe. RCU read lock needs to be held. Found by running with full lockdep debugging enabled.
Fixes f207c10d9823 ("hv_netvsc: use RCU to protect vf_netdev")
Signed-off-by Stephen Hemminger <[email protected]>
---
v2 - fix commit message
drivers/net/hyperv/netvsc_drv.c | 3 +++ 1 file changed, 3 insertions(+)
drivers/net/hyperv/netvsc_drv.c +3 -0
@@ -659,6 +659,7 @@ int netvsc_recv_callback(struct hv_device *device_obj,* policy filters on the host). Deliver these via the VF * interface in the guest. */ +rcu_read_lock (); vf_netdev =rcu_dereference (net_device_ctx->vf_netdev);if (vf_netdev && (vf_netdev->flags &IFF_UP )) net = vf_netdev;
@@ -667,6 +668,7 @@ int netvsc_recv_callback(struct hv_device *device_obj, skb =netvsc_alloc_recv_skb (net, packet, csum_info, *data, vlan_tci);if (unlikely (!skb)) { ++net->stats.rx_dropped; +rcu_read_unlock ();return NVSP_STAT_FAIL ; }
@@ -696,6 +698,7 @@ int netvsc_recv_callback(struct hv_device *device_obj,* TODO - use NAPI? */ netif_rx (skb); +rcu_read_unlock ();return 0 ; }
Signature · 1 line
2.11.0
David Miller
maintainerFrom: Stephen Hemminger <[email protected]>
Date: Wed, 11 Jan 2017 09:16:32 -0800
Quoted 9 lines
The receive callback (in tasklet context) is using RCU to get reference to associated VF network device but this is not safe. RCU read lock needs to be held. Found by running with full lockdep debugging enabled.
Fixes f207c10d9823 ("hv_netvsc: use RCU to protect vf_netdev")Signed-off-by Stephen Hemminger <[email protected]>---
v2 - fix commit message
Applied and queued up for -stable.