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: Andrew Morton <akpm@linux-foundation.org> Acked-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com> Signed-off-by: Eric Dumazet <eric.dumazet@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
Родитель
1b4bf461f0
Коммит
83180af0b0
|
@ -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 */
|
||||
}
|
||||
|
|
Загрузка…
Ссылка в новой задаче