diff options
Diffstat (limited to 'net/ipv6/mcast.c')
| -rw-r--r-- | net/ipv6/mcast.c | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/net/ipv6/mcast.c b/net/ipv6/mcast.c index 9d697d4dcffc..639eb20c9f1f 100644 --- a/net/ipv6/mcast.c +++ b/net/ipv6/mcast.c | |||
| @@ -268,13 +268,14 @@ int ipv6_sock_mc_drop(struct sock *sk, int ifindex, struct in6_addr *addr) | |||
| 268 | if ((dev = dev_get_by_index(mc_lst->ifindex)) != NULL) { | 268 | if ((dev = dev_get_by_index(mc_lst->ifindex)) != NULL) { |
| 269 | struct inet6_dev *idev = in6_dev_get(dev); | 269 | struct inet6_dev *idev = in6_dev_get(dev); |
| 270 | 270 | ||
| 271 | (void) ip6_mc_leave_src(sk, mc_lst, idev); | ||
| 271 | if (idev) { | 272 | if (idev) { |
| 272 | (void) ip6_mc_leave_src(sk,mc_lst,idev); | ||
| 273 | __ipv6_dev_mc_dec(idev, &mc_lst->addr); | 273 | __ipv6_dev_mc_dec(idev, &mc_lst->addr); |
| 274 | in6_dev_put(idev); | 274 | in6_dev_put(idev); |
| 275 | } | 275 | } |
| 276 | dev_put(dev); | 276 | dev_put(dev); |
| 277 | } | 277 | } else |
| 278 | (void) ip6_mc_leave_src(sk, mc_lst, NULL); | ||
| 278 | sock_kfree_s(sk, mc_lst, sizeof(*mc_lst)); | 279 | sock_kfree_s(sk, mc_lst, sizeof(*mc_lst)); |
| 279 | return 0; | 280 | return 0; |
| 280 | } | 281 | } |
| @@ -334,13 +335,14 @@ void ipv6_sock_mc_close(struct sock *sk) | |||
| 334 | if (dev) { | 335 | if (dev) { |
| 335 | struct inet6_dev *idev = in6_dev_get(dev); | 336 | struct inet6_dev *idev = in6_dev_get(dev); |
| 336 | 337 | ||
| 338 | (void) ip6_mc_leave_src(sk, mc_lst, idev); | ||
| 337 | if (idev) { | 339 | if (idev) { |
| 338 | (void) ip6_mc_leave_src(sk, mc_lst, idev); | ||
| 339 | __ipv6_dev_mc_dec(idev, &mc_lst->addr); | 340 | __ipv6_dev_mc_dec(idev, &mc_lst->addr); |
| 340 | in6_dev_put(idev); | 341 | in6_dev_put(idev); |
| 341 | } | 342 | } |
| 342 | dev_put(dev); | 343 | dev_put(dev); |
| 343 | } | 344 | } else |
| 345 | (void) ip6_mc_leave_src(sk, mc_lst, NULL); | ||
| 344 | 346 | ||
| 345 | sock_kfree_s(sk, mc_lst, sizeof(*mc_lst)); | 347 | sock_kfree_s(sk, mc_lst, sizeof(*mc_lst)); |
| 346 | 348 | ||
