net: move fib_rules_unregister() under rtnl lock
authorWANG Cong <xiyou.wangcong@gmail.com>
Tue, 31 Mar 2015 18:01:46 +0000 (11:01 -0700)
committerDavid S. Miller <davem@davemloft.net>
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 <alexander.h.duyck@redhat.com>
Cc: Thomas Graf <tgraf@suug.ch>
Signed-off-by: Cong Wang <xiyou.wangcong@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
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