linux/net
Eric Dumazet 13475a30b6 tcp: connect() race with timewait reuse
Its currently possible that several threads issuing a connect() find
the same timewait socket and try to reuse it, leading to list
corruptions.

Condition for bug is that these threads bound their socket on same
address/port of to-be-find timewait socket, and connected to same
target. (SO_REUSEADDR needed)

To fix this problem, we could unhash timewait socket while holding
ehash lock, to make sure lookups/changes will be serialized. Only
first thread finds the timewait socket, other ones find the
established socket and return an EADDRNOTAVAIL error.

This second version takes into account Evgeniy's review and makes sure
inet_twsk_put() is called outside of locked sections.

Signed-off-by: Eric Dumazet <eric.dumazet@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2009-12-03 16:17:43 -08:00
..
9p net: Move && and || to end of previous line 2009-11-29 16:55:45 -08:00
802 net: remove COMPAT_NET_DEV_OPS 2009-05-25 01:53:53 -07:00
8021q netdevice: provide common routine for macvlan and vlan operstate management 2009-12-03 15:59:22 -08:00
appletalk net: use net_eq to compare nets 2009-11-25 15:14:13 -08:00
atm net: use net_eq to compare nets 2009-11-25 15:14:13 -08:00
ax25 net: use net_eq to compare nets 2009-11-25 15:14:13 -08:00
bluetooth Bluetooth: Add RFCOMM option to use L2CAP ERTM mode 2009-12-03 19:34:26 +01:00
bridge net: Move && and || to end of previous line 2009-11-29 16:55:45 -08:00
can net: Move && and || to end of previous line 2009-11-29 16:55:45 -08:00
core netdevice: provide common routine for macvlan and vlan operstate management 2009-12-03 15:59:22 -08:00
dcb net: Move && and || to end of previous line 2009-11-29 16:55:45 -08:00
dccp TCPCT part 1a: add request_values parameter for sending SYNACK 2009-12-02 22:07:23 -08:00
decnet net: Allow fib_rule_unregister to batch 2009-12-03 12:22:55 -08:00
dsa netdev: convert pseudo-devices to netdev_tx_t 2009-09-01 01:13:07 -07:00
econet net: use net_eq to compare nets 2009-11-25 15:14:13 -08:00
ethernet remove deprecated and not used: print_mac() 2009-11-15 22:21:34 -08:00
ieee802154 net: use net_eq to compare nets 2009-11-25 15:14:13 -08:00
ipv4 tcp: connect() race with timewait reuse 2009-12-03 16:17:43 -08:00
ipv6 tcp: connect() race with timewait reuse 2009-12-03 16:17:43 -08:00
ipx net: use net_eq to compare nets 2009-11-25 15:14:13 -08:00
irda net: Move && and || to end of previous line 2009-11-29 16:55:45 -08:00
iucv iucv: add work_queue cleanup for suspend 2009-11-13 20:46:58 -08:00
key net: Simplify af_key pernet operations. 2009-12-01 16:15:54 -08:00
lapb net: remove NET_RX_BAD and NET_RX_CN* defines 2009-07-05 19:15:35 -07:00
llc net: use net_eq to compare nets 2009-11-25 15:14:13 -08:00
mac80211 Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6 2009-12-01 22:13:38 -08:00
netfilter Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/kaber/nf-next-2.6 2009-12-03 13:23:12 -08:00
netlabel net: rename skb->iif to skb->skb_iif 2009-11-20 15:35:04 -08:00
netlink net: use net_eq to compare nets 2009-11-25 15:14:13 -08:00
netrom net: use net_eq to compare nets 2009-11-25 15:14:13 -08:00
packet net: Move && and || to end of previous line 2009-11-29 16:55:45 -08:00
phonet net: Simplify phonet pernet operations. 2009-12-01 16:15:57 -08:00
rds net: Move && and || to end of previous line 2009-11-29 16:55:45 -08:00
rfkill Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6 2009-11-29 00:57:15 -08:00
rose net: Move && and || to end of previous line 2009-11-29 16:55:45 -08:00
rxrpc net: use net_eq to compare nets 2009-11-25 15:14:13 -08:00
sched net: Move && and || to end of previous line 2009-11-29 16:55:45 -08:00
sctp sctp: fix sctp_setsockopt_autoclose compile warning 2009-12-02 01:16:49 -08:00
sunrpc Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6 2009-12-01 22:13:38 -08:00
tipc net: Move && and || to end of previous line 2009-11-29 16:55:45 -08:00
unix net: Move && and || to end of previous line 2009-11-29 16:55:45 -08:00
wanrouter headers: smp_lock.h redux 2009-07-12 12:22:34 -07:00
wimax net: Move && and || to end of previous line 2009-11-29 16:55:45 -08:00
wireless net: Move && and || to end of previous line 2009-11-29 16:55:45 -08:00
x25 X25: Fix oops and refcnt problems from x25_dev_get 2009-11-29 00:25:02 -08:00
xfrm net: Allow xfrm_user_net_exit to batch efficiently. 2009-12-03 12:22:03 -08:00
compat.c net: compat_sys_recvmmsg user timespec arg can be NULL 2009-12-02 01:23:23 -08:00
Kconfig net/compat/wext: send different messages to compat tasks 2009-07-15 08:53:39 -07:00
Makefile net: remove redundant sched/ in net/Makefile 2009-07-12 20:11:14 -07:00
nonet.c
socket.c net: compat_mmsghdr must be used in sys_recvmmsg 2009-12-02 01:23:23 -08:00
sysctl_net.c net: sysctl_net - use net_eq to compare nets 2009-03-16 16:23:30 +01:00
TUNABLE