diff options
author | Eric Dumazet <eric.dumazet@gmail.com> | 2010-11-08 12:15:54 +0100 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2010-11-09 17:26:42 +0100 |
commit | 18943d292facbc70e6a36fc62399ae833f64671b (patch) | |
tree | 337c4818e0cb478a4436ee5ad8d16822998bf8eb /net/ipv4 | |
parent | rds: Fix rds message leak in rds_message_map_pages (diff) | |
download | linux-18943d292facbc70e6a36fc62399ae833f64671b.tar.xz linux-18943d292facbc70e6a36fc62399ae833f64671b.zip |
inet: fix ip_mc_drop_socket()
commit 8723e1b4ad9be4444 (inet: RCU changes in inetdev_by_index())
forgot one call site in ip_mc_drop_socket()
We should not decrease idev refcount after inetdev_by_index() call,
since refcount is not increased anymore.
Reported-by: Markus Trippelsdorf <markus@trippelsdorf.de>
Reported-by: Miles Lane <miles.lane@gmail.com>
Signed-off-by: Eric Dumazet <eric.dumazet@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/ipv4')
-rw-r--r-- | net/ipv4/igmp.c | 4 |
1 files changed, 1 insertions, 3 deletions
diff --git a/net/ipv4/igmp.c b/net/ipv4/igmp.c index c8877c6c7216..3c53c2d89e3b 100644 --- a/net/ipv4/igmp.c +++ b/net/ipv4/igmp.c @@ -2306,10 +2306,8 @@ void ip_mc_drop_socket(struct sock *sk) in_dev = inetdev_by_index(net, iml->multi.imr_ifindex); (void) ip_mc_leave_src(sk, iml, in_dev); - if (in_dev != NULL) { + if (in_dev != NULL) ip_mc_dec_group(in_dev, iml->multi.imr_multiaddr.s_addr); - in_dev_put(in_dev); - } /* decrease mem now to avoid the memleak warning */ atomic_sub(sizeof(*iml), &sk->sk_omem_alloc); call_rcu(&iml->rcu, ip_mc_socklist_reclaim); |