linux/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 [NETLINK]: Synchronous message processing. 2005-05-03 14:55:09 -07:00
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 [PATCH] kill gratitious includes of major.h under net/* 2005-04-25 18:32:13 -07:00
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 [SELINUX]: Fix ipv6_skip_exthdr() invocation causing OOPS. 2005-04-24 20:16:19 -07:00
exthdrs.c Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
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 [IPV6]: Clear up user copy warning in flowlabel code. 2005-05-29 20:28:01 -07:00
ip6_input.c Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
ip6_output.c [IPV4/IPV6] Ensure all frag_list members have NULL sk 2005-05-18 22:52:33 -07:00
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 [IPV6]: Kill export of fl6_sock_lookup. 2005-06-02 13:06:36 -07:00
Kconfig Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
Makefile Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
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 Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
protocol.c Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
raw.c [IPV4/IPV6]: Replace spin_lock_irq with spin_lock_bh 2005-06-18 22:56:18 -07:00
reassembly.c Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
route.c [IPV6]: V6 route events reported with wrong netlink PID and seq number 2005-06-21 13:51:04 -07:00
sit.c Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
sysctl_net_ipv6.c Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
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 Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
xfrm6_output.c [IPV6]: Fix xfrm tunnel oops with large packets 2005-05-23 13:11:07 -07:00
xfrm6_policy.c From: Kazunori Miyazawa <kazunori@miyazawa.org> 2005-05-26 12:58:04 -07:00
xfrm6_state.c Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
xfrm6_tunnel.c [IPSEC]: Add xfrm_init_state 2005-06-20 13:18:08 -07:00