linux-stable-rt/net/ipv6
Herbert Xu 6f4b6ec1cf [IPV6]: Fix illegal dst locking in softirq context.
On Tue, Jan 31, 2006 at 10:24:32PM +0100, Ingo Molnar wrote:
>
>  [<c04de9e8>] _write_lock+0x8/0x10
>  [<c0499015>] inet6_destroy_sock+0x25/0x100
>  [<c04b8672>] tcp_v6_destroy_sock+0x12/0x20
>  [<c046bbda>] inet_csk_destroy_sock+0x4a/0x150
>  [<c047625c>] tcp_rcv_state_process+0xd4c/0xdd0
>  [<c047d8e9>] tcp_v4_do_rcv+0xa9/0x340
>  [<c047eabb>] tcp_v4_rcv+0x8eb/0x9d0

OK this is definitely broken.  We should never touch the dst lock in
softirq context.  Since inet6_destroy_sock may be called from that
context due to the asynchronous nature of sockets, we can't take the
lock there.

In fact this sk_dst_reset is totally redundant since all IPv6 sockets
use inet_sock_destruct as their socket destructor which always cleans
up the dst anyway.  So the solution is to simply remove the call.

Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Signed-off-by: David S. Miller <davem@davemloft.net>
2006-02-02 17:01:13 -08:00
..
netfilter [NETFILTER] ip6tables: whitespace and indent cosmetic cleanup 2006-01-17 02:39:39 -08:00
Kconfig
Makefile [IPV6]: Fix modular build with netfilter enabled. 2006-01-10 21:02:21 -08:00
addrconf.c [IPV6]: Don't hold extra ref count in ipv6_ifa_notify 2006-02-02 16:55:45 -08:00
af_inet6.c [IPV6]: Fix illegal dst locking in softirq context. 2006-02-02 17:01:13 -08:00
ah6.c [NET]: Use NIP6_FMT in kernel.h 2006-01-13 14:29:07 -08:00
anycast.c [IPV6]: Preserve procfs IPV6 address output format 2006-01-17 02:10:53 -08:00
datagram.c [PATCH] capable/capability.h (net/) 2006-01-11 18:42:14 -08:00
esp6.c [NET]: Use NIP6_FMT in kernel.h 2006-01-13 14:29:07 -08:00
exthdrs.c [IPV6]: Move nextheader offset to the IP6CB 2006-01-07 12:57:29 -08:00
exthdrs_core.c
icmp.c [NET]: Use NIP6_FMT in kernel.h 2006-01-13 14:29:07 -08:00
inet6_connection_sock.c [IPV6]: small cleanups 2006-01-07 13:24:25 -08:00
inet6_hashtables.c [INET6]: Generalise tcp_v6_hash_connect 2006-01-03 13:10:56 -08:00
ip6_fib.c [IPV6]: Put addr_diff() into common header for future use. 2005-11-08 09:37:56 -08:00
ip6_flowlabel.c [IPV6]: Preserve procfs IPV6 address output format 2006-01-17 02:10:53 -08:00
ip6_input.c [IPV4/6]: Netfilter IPsec input hooks 2006-01-07 12:57:31 -08:00
ip6_output.c [IPV6]: Set skb->priority in ip6_output.c 2006-01-09 14:16:31 -08:00
ip6_tunnel.c [PATCH] capable/capability.h (net/) 2006-01-11 18:42:14 -08:00
ipcomp6.c [NET]: Use NIP6_FMT in kernel.h 2006-01-13 14:29:07 -08:00
ipv6_sockglue.c [PATCH] capable/capability.h (net/) 2006-01-11 18:42:14 -08:00
ipv6_syms.c [IPV6]: Make ipv6_addr_type() more generic so that we can use it for source address selection. 2005-11-08 09:38:12 -08:00
mcast.c [IPV6] MLDv2: fix change records when transitioning to/from inactive 2006-01-24 13:06:39 -08:00
ndisc.c [NET]: Use NIP6_FMT in kernel.h 2006-01-13 14:29:07 -08:00
netfilter.c [IPV6]: Fix modular build with netfilter enabled. 2006-01-10 21:02:21 -08:00
proc.c [NET]: Wider use of for_each_*cpu() 2005-10-25 23:54:01 -02:00
protocol.c
raw.c [IP]: Simplify and consolidate MSG_PEEK error handling 2006-01-03 13:10:41 -08:00
reassembly.c [IPV6]: Move nextheader offset to the IP6CB 2006-01-07 12:57:29 -08:00
route.c [PATCH] capable/capability.h (net/) 2006-01-11 18:42:14 -08:00
sit.c [PATCH] capable/capability.h (net/) 2006-01-11 18:42:14 -08:00
sysctl_net_ipv6.c
tcp_ipv6.c [IPV6] tcp_v6_send_synack: release the destination 2006-01-31 17:51:44 -08:00
udp.c [IPV6]: Move nextheader offset to the IP6CB 2006-01-07 12:57:29 -08:00
xfrm6_input.c [IPV4/6]: Netfilter IPsec input hooks 2006-01-07 12:57:31 -08:00
xfrm6_output.c [NETFILTER]: Fix xfrm lookup in ip_route_me_harder/ip6_route_me_harder 2006-01-07 12:57:33 -08:00
xfrm6_policy.c [XFRM]: Handle DCCP in xfrm{4,6}_decode_session 2005-12-19 14:03:46 -08:00
xfrm6_state.c [XFRM]: IPsec tunnel wildcard address support 2006-01-13 14:34:36 -08:00
xfrm6_tunnel.c [NET]: Use NIP6_FMT in kernel.h 2006-01-13 14:29:07 -08:00