net: move fib_rules_unregister() under rtnl lock
authorWANG Cong <[email protected]>
Tue, 31 Mar 2015 18:01:46 +0000 (11:01 -0700)
committerDavid S. Miller <[email protected]>
Fri, 3 Apr 2015 00:52:34 +0000 (20:52 -0400)
commit419df12fb5fa558451319276838c1842f2b11f8f
tree711c055fc40c8972b9f3cf91c572a00ca80ed7cb
parented785309c94445dd90e242370e1f7bb034e008fd
net: move fib_rules_unregister() under rtnl lock

We have to hold rtnl lock for fib_rules_unregister()
otherwise the following race could happen:

fib_rules_unregister(): fib_nl_delrule():
... ...
... ops = lookup_rules_ops();
list_del_rcu(&ops->list);
list_for_each_entry(ops->rules) {
fib_rules_cleanup_ops(ops);   ...
  list_del_rcu();   list_del_rcu();
}

Note, net->rules_mod_lock is actually not needed at all,
either upper layer netns code or rtnl lock guarantees
we are safe.

Cc: Alexander Duyck <[email protected]>
Cc: Thomas Graf <[email protected]>
Signed-off-by: Cong Wang <[email protected]>
Signed-off-by: David S. Miller <[email protected]>
net/core/fib_rules.c
net/decnet/dn_rules.c
net/ipv4/fib_frontend.c
net/ipv4/ipmr.c
net/ipv6/fib6_rules.c
net/ipv6/ip6mr.c