kernel-ark/net/ipv6
David L Stevens c9e3e8b695 [IPV6]: multicast join and misc
Here is a simplified version of the patch to fix a bug in IPv6
multicasting. It:

1) adds existence check & EADDRINUSE error for regular joins
2) adds an exception for EADDRINUSE in the source-specific multicast
        join (where a prior join is ok)
3) adds a missing/needed read_lock on sock_mc_list; would've raced
        with destroying the socket on interface down without
4) adds a "leave group" in the (INCLUDE, empty) source filter case.
        This frees unneeded socket buffer memory, but also prevents
        an inappropriate interaction among the 8 socket options that
        mess with this. Some would fail as if in the group when you
        aren't really.

Item #4 had a locking bug in the last version of this patch; rather than
removing the idev->lock read lock only, I've simplified it to remove
all lock state in the path and treat it as a direct "leave group" call for
the (INCLUDE,empty) case it covers. Tested on an MP machine. :-)

Much thanks to HoerdtMickael <hoerdt@clarinet.u-strasbg.fr> who
reported the original bug.

Signed-off-by: David L Stevens <dlstevens@us.ibm.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2005-06-21 13:58:25 -07:00
..
netfilter
addrconf.c [IPV6]: V6 route events reported with wrong netlink PID and seq number 2005-06-21 13:51:04 -07:00
af_inet6.c
ah6.c [IPSEC]: Add xfrm_init_state 2005-06-20 13:18:08 -07:00
anycast.c [IPV6]: V6 route events reported with wrong netlink PID and seq number 2005-06-21 13:51:04 -07:00
datagram.c [IPV4/IPV6]: Replace spin_lock_irq with spin_lock_bh 2005-06-18 22:56:18 -07:00
esp6.c [IPSEC]: Add xfrm_init_state 2005-06-20 13:18:08 -07:00
exthdrs_core.c
exthdrs.c
icmp.c [IPV6]: Ensure to use icmpv6_socket in non-preemptive context. 2005-06-13 14:59:44 -07:00
ip6_fib.c [IPV6]: V6 route events reported with wrong netlink PID and seq number 2005-06-21 13:51:04 -07:00
ip6_flowlabel.c
ip6_input.c
ip6_output.c
ip6_tunnel.c [IPV6]: Update parm.link in ip6ip6_tnl_change() 2005-06-08 14:54:38 -07:00
ipcomp6.c [IPSEC]: Add xfrm_init_state 2005-06-20 13:18:08 -07:00
ipv6_sockglue.c [IPV6]: multicast join and misc 2005-06-21 13:58:25 -07:00
ipv6_syms.c
Kconfig
Makefile
mcast.c [IPV6]: multicast join and misc 2005-06-21 13:58:25 -07:00
ndisc.c [IPV6]: V6 route events reported with wrong netlink PID and seq number 2005-06-21 13:51:04 -07:00
proc.c
protocol.c
raw.c [IPV4/IPV6]: Replace spin_lock_irq with spin_lock_bh 2005-06-18 22:56:18 -07:00
reassembly.c
route.c [IPV6]: V6 route events reported with wrong netlink PID and seq number 2005-06-21 13:51:04 -07:00
sit.c
sysctl_net_ipv6.c
tcp_ipv6.c [NET] rename struct tcp_listen_opt to struct listen_sock 2005-06-18 22:48:55 -07:00
udp.c [IPV4/IPV6]: Replace spin_lock_irq with spin_lock_bh 2005-06-18 22:56:18 -07:00
xfrm6_input.c
xfrm6_output.c
xfrm6_policy.c
xfrm6_state.c
xfrm6_tunnel.c [IPSEC]: Add xfrm_init_state 2005-06-20 13:18:08 -07:00