Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 83180af0 authored by Eric Dumazet's avatar Eric Dumazet Committed by David S. Miller
Browse files

net: fix rcu use in ip_route_output_slow



__in_dev_get_rtnl(dev_out) is called while RTNL is not held, thus
triggers a lockdep fault.

At this point, we only perform a raw test of dev_out->ip_ptr being NULL,
we dont need to make sure ip_ptr cant changed right after.

We can use rcu_dereference_raw() for this.

Reported-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Acked-by: default avatarPaul E. McKenney <paulmck@linux.vnet.ibm.com>
Signed-off-by: default avatarEric Dumazet <eric.dumazet@gmail.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 1b4bf461
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -2579,7 +2579,7 @@ static int ip_route_output_slow(struct net *net, struct rtable **rp,
			goto out;

		/* RACE: Check return value of inet_select_addr instead. */
		if (__in_dev_get_rtnl(dev_out) == NULL) {
		if (rcu_dereference_raw(dev_out->ip_ptr) == NULL) {
			dev_put(dev_out);
			goto out;	/* Wrong error code */
		}