fib: add rtnl locking in ip_fib_net_exit
authorEric Dumazet <eric.dumazet@gmail.com>
Wed, 30 Mar 2011 23:57:46 +0000 (16:57 -0700)
committerDavid S. Miller <davem@davemloft.net>
Wed, 30 Mar 2011 23:57:46 +0000 (16:57 -0700)
Daniel J Blueman reported a lockdep splat in trie_firstleaf(), caused by
RTNL being not locked before a call to fib_table_flush()

Reported-by: Daniel J Blueman <daniel.blueman@gmail.com>
Signed-off-by: Eric Dumazet <eric.dumazet@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/ipv4/fib_frontend.c

index f116ce8f1b466204f41279e06f57932e274fbdad..451088330bbb65dd5c6fda36f043eb2a68511ce6 100644 (file)
@@ -1068,6 +1068,7 @@ static void ip_fib_net_exit(struct net *net)
        fib4_rules_exit(net);
 #endif
 
+       rtnl_lock();
        for (i = 0; i < FIB_TABLE_HASHSZ; i++) {
                struct fib_table *tb;
                struct hlist_head *head;
@@ -1080,6 +1081,7 @@ static void ip_fib_net_exit(struct net *net)
                        fib_free_table(tb);
                }
        }
+       rtnl_unlock();
        kfree(net->ipv4.fib_table_hash);
 }