On Tue, 2017-06-06 at 18:34 -0600, David Ahern wrote: > On 6/6/17 6:27 PM, Eric Dumazet wrote: > > Good catch, but it looks like similar fix is needed a few lines before. > > > > diff --git a/net/ipv6/ip6_fib.c b/net/ipv6/ip6_fib.c > > index > > deea901746c8570c5e801e40592c91e3b62812e0..b214443dc8346cef3690df7f27cc48a864028865 > > 100644 > > --- a/net/ipv6/ip6_fib.c > > +++ b/net/ipv6/ip6_fib.c > > @@ -372,12 +372,13 @@ static int fib6_dump_table(struct fib6_table *table, > > struct sk_buff *skb, > > > > read_lock_bh(&table->tb6_lock); > > res = fib6_walk(net, w); > > - read_unlock_bh(&table->tb6_lock); > > if (res > 0) { > > cb->args[4] = 1; > > cb->args[5] = w->root->fn_sernum; > > } > > + read_unlock_bh(&table->tb6_lock); > > indeed. tunnel vision on Ben's problem
BTW, bug was already Ben's problem when Patrick tried to fix it in commit 2bec5a369ee79 ("ipv6: fib: fix crash when changing large fib while dumping it") seven years ago ;)