diff options
Diffstat (limited to 'net/ipv4/igmp.c')
| -rw-r--r-- | net/ipv4/igmp.c | 5 | 
1 files changed, 3 insertions, 2 deletions
diff --git a/net/ipv4/igmp.c b/net/ipv4/igmp.c index 6baf36e11808..05e4cba14162 100644 --- a/net/ipv4/igmp.c +++ b/net/ipv4/igmp.c @@ -2126,7 +2126,7 @@ int ip_mc_leave_group(struct sock *sk, struct ip_mreqn *imr)  	ASSERT_RTNL();  	in_dev = ip_mc_find_dev(net, imr); -	if (!in_dev) { +	if (!imr->imr_ifindex && !imr->imr_address.s_addr && !in_dev) {  		ret = -ENODEV;  		goto out;  	} @@ -2147,7 +2147,8 @@ int ip_mc_leave_group(struct sock *sk, struct ip_mreqn *imr)  		*imlp = iml->next_rcu; -		ip_mc_dec_group(in_dev, group); +		if (in_dev) +			ip_mc_dec_group(in_dev, group);  		/* decrease mem now to avoid the memleak warning */  		atomic_sub(sizeof(*iml), &sk->sk_omem_alloc);  | 
