From: David Ahern Date: Sun, 16 Aug 2015 13:49:20 +0000 (-0600) Subject: net: Updates to netif_index_is_vrf X-Git-Tag: v4.3-rc1~96^2~147 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=2f52bdcf6ba1bd81597b1505a222430676548b3a;p=platform%2Fkernel%2Flinux-exynos.git net: Updates to netif_index_is_vrf As Eric noted netif_index_is_vrf is not called with rcu_read_lock held, so wrap the dev_get_by_index_rcu in rcu_read_lock and unlock. If VRF is not enabled or oif is 0 skip the device lookup. In both cases index cannot be the VRF master. Signed-off-by: David Ahern Signed-off-by: David S. Miller --- diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h index d131755..8a530f9 100644 --- a/include/linux/netdevice.h +++ b/include/linux/netdevice.h @@ -3822,12 +3822,22 @@ static inline bool netif_is_vrf(const struct net_device *dev) static inline bool netif_index_is_vrf(struct net *net, int ifindex) { - struct net_device *dev = dev_get_by_index_rcu(net, ifindex); bool rc = false; +#if IS_ENABLED(CONFIG_NET_VRF) + struct net_device *dev; + + if (ifindex == 0) + return false; + + rcu_read_lock(); + + dev = dev_get_by_index_rcu(net, ifindex); if (dev) rc = netif_is_vrf(dev); + rcu_read_unlock(); +#endif return rc; }