linux/net/ipv6
Pavel Emelyanov 78c2e50253 [IPV6]: Fix race in ipv6_flowlabel_opt() when inserting two labels
In the IPV6_FL_A_GET case the hash is checked for flowlabels
with the given label. If it is not found, the lock, protecting 
the hash, is dropped to be re-get for writing. After this a
newly allocated entry is inserted, but no checks are performed
to catch a classical SMP race, when the conflicting label may 
be inserted on another cpu.

Use the (currently unused) return value from fl_intern() to
return the conflicting entry (if found) and re-check, whether
we can reuse it (IPV6_FL_F_EXCL) or return -EEXISTS.

Also add the comment, about why not re-lookup the current
sock for conflicting flowlabel entry.

Signed-off-by: Pavel Emelyanov <xemul@openvz.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
2007-10-18 05:18:56 -07:00
..
netfilter [INET]: Consolidate frag queues freeing 2007-10-17 19:48:26 -07:00
addrconf_core.c [IPV6]: ipv6_addr_type() doesn't know about RFC4193 addresses. 2007-07-31 02:28:21 -07:00
addrconf.c [IPV6]: Cleanup snmp6_alloc_dev() 2007-10-17 21:25:32 -07:00
af_inet6.c [IPV6]: Fix memory leak in cleanup_ipv6_mibs() 2007-10-17 19:30:40 -07:00
ah6.c [IPSEC]: Disallow combinations of RO and AH/ESP/IPCOMP 2007-10-17 21:35:15 -07:00
anycast.c [NET]: Make core networking code use seq_open_private 2007-10-10 16:55:33 -07:00
datagram.c [NET]: Make the device list and device lookups per namespace. 2007-10-10 16:49:10 -07:00
esp6.c [IPSEC]: Disallow combinations of RO and AH/ESP/IPCOMP 2007-10-17 21:35:15 -07:00
exthdrs_core.c [NET] IPV6: Fix whitespace errors. 2007-02-10 23:19:42 -08:00
exthdrs.c [IPV6]: Replace sk_buff ** with sk_buff * in input handlers 2007-10-15 12:50:28 -07:00
fib6_rules.c [IPV4/IPV6/DECNET]: Small cleanup for fib rules. 2007-10-10 16:51:22 -07:00
icmp.c [IPV6]: Replace sk_buff ** with sk_buff * in input handlers 2007-10-15 12:50:28 -07:00
inet6_connection_sock.c [IPV6] __inet6_csk_dst_store(): fix check-after-use 2007-10-15 12:26:32 -07:00
inet6_hashtables.c [INET]: local port range robustness 2007-10-10 17:30:46 -07:00
ip6_fib.c [IPv6]: use container_of() macro in fib6_clean_node() 2007-10-10 16:54:58 -07:00
ip6_flowlabel.c [IPV6]: Fix race in ipv6_flowlabel_opt() when inserting two labels 2007-10-18 05:18:56 -07:00
ip6_input.c [IPV6]: Replace sk_buff ** with sk_buff * in input handlers 2007-10-15 12:50:28 -07:00
ip6_output.c [IPV6]: Uninline netfilter okfns 2007-10-15 12:26:36 -07:00
ip6_tunnel.c [NET]: Nuke SET_MODULE_OWNER macro. 2007-10-10 16:51:13 -07:00
ipcomp6.c [IPSEC]: Disallow combinations of RO and AH/ESP/IPCOMP 2007-10-17 21:35:15 -07:00
ipv6_sockglue.c [IPv6]: Update setsockopt(IPV6_MULTICAST_IF) to support RFC 3493, try2 2007-10-11 14:39:29 -07:00
Kconfig [IPV6] MIP6: Loadable module support for MIPv6. 2007-07-10 22:15:42 -07:00
Makefile [IPV6] MIP6: Loadable module support for MIPv6. 2007-07-10 22:15:42 -07:00
mcast.c [NET]: Make core networking code use seq_open_private 2007-10-10 16:55:33 -07:00
mip6.c [IPSEC]: Move IP length/checksum setting out of transforms 2007-10-10 16:55:56 -07:00
ndisc.c [IPv6]: Export userland ND options through netlink (RDNSS support) 2007-10-10 21:22:05 -07:00
netfilter.c [NETFILTER]: Replace sk_buff ** with sk_buff * 2007-10-15 12:26:29 -07:00
proc.c [INET]: Collect frag queues management objects together 2007-10-15 12:26:39 -07:00
protocol.c [IPV6]: Decentralize EXPORT_SYMBOLs. 2007-04-25 22:23:36 -07:00
raw.c [NET]: Make core networking code use seq_open_private 2007-10-10 16:55:33 -07:00
reassembly.c [INET]: Consolidate frag queues freeing 2007-10-17 19:48:26 -07:00
route.c [IPV6]: Consolidate the ip6_pol_route_(input|output) pair 2007-10-15 13:02:51 -07:00
sit.c [NET]: Nuke SET_MODULE_OWNER macro. 2007-10-10 16:51:13 -07:00
sysctl_net_ipv6.c [INET]: Collect common frag sysctl variables together 2007-10-15 12:26:40 -07:00
tcp_ipv6.c [IPV6]: Replace sk_buff ** with sk_buff * in input handlers 2007-10-15 12:50:28 -07:00
tunnel6.c [IPV6]: Replace sk_buff ** with sk_buff * in input handlers 2007-10-15 12:50:28 -07:00
udp_impl.h [IPV6]: Replace sk_buff ** with sk_buff * in input handlers 2007-10-15 12:50:28 -07:00
udp.c [IPV6]: Replace sk_buff ** with sk_buff * in input handlers 2007-10-15 12:50:28 -07:00
udplite.c [IPV6]: Replace sk_buff ** with sk_buff * in input handlers 2007-10-15 12:50:28 -07:00
xfrm6_input.c [IPSEC]: Rename mode to outer_mode and add inner_mode 2007-10-17 21:35:51 -07:00
xfrm6_mode_beet.c [IPSEC]: Add missing BEET checks 2007-10-17 21:31:50 -07:00
xfrm6_mode_ro.c [IPSEC]: Disallow combinations of RO and AH/ESP/IPCOMP 2007-10-17 21:35:15 -07:00
xfrm6_mode_transport.c [IPSEC]: Use IPv6 calling convention as the convention for x->mode->output 2007-10-10 16:55:54 -07:00
xfrm6_mode_tunnel.c [IPSEC]: Add missing BEET checks 2007-10-17 21:31:50 -07:00
xfrm6_output.c [IPSEC]: Rename mode to outer_mode and add inner_mode 2007-10-17 21:35:51 -07:00
xfrm6_policy.c [IPSEC]: Rename mode to outer_mode and add inner_mode 2007-10-17 21:35:51 -07:00
xfrm6_state.c [IPSEC]: Store afinfo pointer in xfrm_mode 2007-10-17 21:33:12 -07:00
xfrm6_tunnel.c [IPSEC]: Get nexthdr from caller in xfrm6_rcv_spi 2007-10-17 21:29:25 -07:00