diff options
| -rw-r--r-- | net/ipv6/route.c | 7 | 
1 files changed, 6 insertions, 1 deletions
diff --git a/net/ipv6/route.c b/net/ipv6/route.c index 6793135d49db..60705b4d2c62 100644 --- a/net/ipv6/route.c +++ b/net/ipv6/route.c @@ -3611,8 +3611,11 @@ static int inet6_rtm_getroute(struct sk_buff *in_skb, struct nlmsghdr *nlh,  		struct net_device *dev;  		int flags = 0; -		dev = __dev_get_by_index(net, iif); +		rcu_read_lock(); + +		dev = dev_get_by_index_rcu(net, iif);  		if (!dev) { +			rcu_read_unlock();  			err = -ENODEV;  			goto errout;  		} @@ -3624,6 +3627,8 @@ static int inet6_rtm_getroute(struct sk_buff *in_skb, struct nlmsghdr *nlh,  		if (!fibmatch)  			dst = ip6_route_input_lookup(net, dev, &fl6, flags); + +		rcu_read_unlock();  	} else {  		fl6.flowi6_oif = oif;  | 
