As Eric noted netif_index_is_vrf is not called with rcu_read_lock held, so use dev_get_by_index instead of dev_get_by_index_rcu.
If VRF is not enabled or oif is 0 skip the device lookup. Signed-off-by: David Ahern <d...@cumulusnetworks.com> --- include/linux/netdevice.h | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h index f7a6ef2fae3a..dca36a618781 100644 --- a/include/linux/netdevice.h +++ b/include/linux/netdevice.h @@ -3819,12 +3819,20 @@ 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 (dev) - rc = netif_is_vrf(dev); +#if IS_ENABLED(CONFIG_NET_VRF) + struct net_device *dev; + + if (ifindex == 0) + return false; + dev = dev_get_by_index(net, ifindex); + if (dev) { + rc = netif_is_vrf(dev); + dev_put(dev); + } +#endif return rc; } -- 2.3.2 (Apple Git-55) -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html