diff options
author | Marcelo Ricardo Leitner <marcelo.leitner@gmail.com> | 2015-03-18 14:50:43 -0300 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2015-03-18 22:05:09 -0400 |
commit | 54ff9ef36bdf84d469a098cbf8e2a103fbc77054 (patch) | |
tree | 74fb6219d97f44685a80b090888ffd5ea667e01e /net/netfilter | |
parent | baf606d9c9b12517e47e0d1370e8aa9f7323f210 (diff) | |
download | linux-54ff9ef36bdf84d469a098cbf8e2a103fbc77054.tar.gz linux-54ff9ef36bdf84d469a098cbf8e2a103fbc77054.tar.bz2 linux-54ff9ef36bdf84d469a098cbf8e2a103fbc77054.zip |
ipv4, ipv6: kill ip_mc_{join, leave}_group and ipv6_sock_mc_{join, drop}
in favor of their inner __ ones, which doesn't grab rtnl.
As these functions need to operate on a locked socket, we can't be
grabbing rtnl by then. It's too late and doing so causes reversed
locking.
So this patch:
- move rtnl handling to callers instead while already fixing some
reversed locking situations, like on vxlan and ipvs code.
- renames __ ones to not have the __ mark:
__ip_mc_{join,leave}_group -> ip_mc_{join,leave}_group
__ipv6_sock_mc_{join,drop} -> ipv6_sock_mc_{join,drop}
Signed-off-by: Marcelo Ricardo Leitner <marcelo.leitner@gmail.com>
Acked-by: Hannes Frederic Sowa <hannes@stressinduktion.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/netfilter')
-rw-r--r-- | net/netfilter/ipvs/ip_vs_sync.c | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/net/netfilter/ipvs/ip_vs_sync.c b/net/netfilter/ipvs/ip_vs_sync.c index 08d95559b6f7..19b9cce6c210 100644 --- a/net/netfilter/ipvs/ip_vs_sync.c +++ b/net/netfilter/ipvs/ip_vs_sync.c @@ -1405,9 +1405,11 @@ join_mcast_group(struct sock *sk, struct in_addr *addr, char *ifname) mreq.imr_ifindex = dev->ifindex; + rtnl_lock(); lock_sock(sk); ret = ip_mc_join_group(sk, &mreq); release_sock(sk); + rtnl_unlock(); return ret; } |