ipvs: call rtnl_lock early
authorJulian Anastasov <ja@ssi.bg>
Sun, 26 Jul 2015 11:57:34 +0000 (14:57 +0300)
committerSimon Horman <horms@verge.net.au>
Fri, 21 Aug 2015 16:09:09 +0000 (09:09 -0700)
commite0b26cc997d57305b4097711e12e13992580ae34
tree7f6cfc4c19f8274c8cc9af7fea9379afdff706b5
parenteefa32d3f3c54bc7f9704968bc78adf0439c6c2a
ipvs: call rtnl_lock early

When the sync damon is started we need to hold rtnl
lock while calling ip_mc_join_group. Currently, we have
a wrong locking order because the correct one is
rtnl_lock->__ip_vs_mutex. It is implied from the usage
of __ip_vs_mutex in ip_vs_dst_event() which is called
under rtnl lock during NETDEV_* notifications.

Fix the problem by calling rtnl_lock early only for the
start_sync_thread call. As a bonus this fixes the usage
__dev_get_by_name which was not called under rtnl lock.

This patch actually extends and depends on commit 54ff9ef36bdf
("ipv4, ipv6: kill ip_mc_{join, leave}_group and
ipv6_sock_mc_{join, drop}").

Signed-off-by: Julian Anastasov <ja@ssi.bg>
Signed-off-by: Simon Horman <horms@verge.net.au>
net/netfilter/ipvs/ip_vs_ctl.c
net/netfilter/ipvs/ip_vs_sync.c