diff options
author | Jun Zhao <mypopydev@gmail.com> | 2011-11-22 18:19:03 +0100 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2011-11-23 23:31:39 +0100 |
commit | 685f94e6db8496399c881218018166515445a914 (patch) | |
tree | 1eb51c364b0f8231d182500c63dbbe2ecf97dcec /net | |
parent | ipv6: tcp: fix tcp_v6_conn_request() (diff) | |
download | linux-685f94e6db8496399c881218018166515445a914.tar.xz linux-685f94e6db8496399c881218018166515445a914.zip |
ipv4 : igmp : fix error handle in ip_mc_add_src()
When add sources to interface failure, need to roll back the sfcount[MODE]
to before state. We need to match it corresponding.
Acked-by: David L Stevens <dlstevens@us.ibm.com>
Acked-by: Eric Dumazet <eric.dumazet@gmail.com>
Signed-off-by: Jun Zhao <mypopydev@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net')
-rw-r--r-- | net/ipv4/igmp.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/net/ipv4/igmp.c b/net/ipv4/igmp.c index c7472eff2d51..b2ca095cb9da 100644 --- a/net/ipv4/igmp.c +++ b/net/ipv4/igmp.c @@ -1716,7 +1716,8 @@ static int ip_mc_add_src(struct in_device *in_dev, __be32 *pmca, int sfmode, if (err) { int j; - pmc->sfcount[sfmode]--; + if (!delta) + pmc->sfcount[sfmode]--; for (j=0; j<i; j++) (void) ip_mc_del1_src(pmc, sfmode, &psfsrc[j]); } else if (isexclude != (pmc->sfcount[MCAST_EXCLUDE] != 0)) { |