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)
committerBrad Figg <brad.figg@canonical.com>
Wed, 27 Apr 2011 18:41:54 +0000 (11:41 -0700)
BugLink: http://bugs.launchpad.net/bugs/769042

[ Upstream commit e2666f84958adb3a034b98e99699b55705117e01 ]

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>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Signed-off-by: Leann Ogasawara <leann.ogasawara@canonical.com>

net/ipv4/fib_frontend.c

index 1d2cdd4..8725e78 100644 (file)
@@ -1041,6 +1041,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;
@@ -1053,6 +1054,7 @@ static void ip_fib_net_exit(struct net *net)
                        fib_free_table(tb);
                }
        }
+       rtnl_unlock();
        kfree(net->ipv4.fib_table_hash);
 }