freebsd-dev/sys/netinet
Robert Watson 109058b094 tcp_usrreq.c:1.313 removed tcbinfo locking from tcp_usr_accept(), which
while in principle a good idea, opened us up to a race inherrent to
the syncache's direct insertion of incoming TCP connections into the
"completed connection" listen queue, as it transpires that the socket
is inserted before the inpcb is fully filled in by syncache_expand().
The bug manifested with the occasional returning of 0.0.0.0:0 in the
address returned by the accept() system call, which occurred if accept
managed to execute tcp_usr_accept() before syncache_expand() had copied
the endpoint addresses into inpcb connection state.

Re-add tcbinfo locking around the address copyout, which has the effect
of delaying the copy until syncache_expand() has finished running, as
it is run while the tcbinfo lock is held.  This is undesirable in that
it increases contention on tcbinfo further, but a more significant
change will be required to how the syncache inserts new sockets in
order to fix this and keep more granular locking here.  In particular,
either more state needs to be passed into sonewconn() so that
pru_attach() can fill in the fields *before* the socket is inserted, or
the socket needs to be inserted in the incomplete connection queue
until it is actually ready to be used.

Reported by:	glebius (and kris)
Tested by:	glebius
2008-01-23 21:15:51 +00:00
..
libalias Simpler version of the previous commit. 2007-12-06 09:31:13 +00:00
accf_data.c Add FBSDID to all files in netinet so that people can more 2007-10-07 20:44:24 +00:00
accf_http.c Add FBSDID to all files in netinet so that people can more 2007-10-07 20:44:24 +00:00
icmp6.h - Disabled responding to NI queries from a global address by default as 2007-05-17 21:20:24 +00:00
icmp_var.h Attempt to improve feature parity between UDPv4 and UDPv6 by merging 2007-07-19 22:34:25 +00:00
if_atm.c Add newline to debuging printf. 2005-08-26 15:27:18 +00:00
if_atm.h
if_ether.c Don't duplicate the whole of arpresolve to arpresolve 2 for the sake 2007-12-31 23:48:06 +00:00
if_ether.h Don't duplicate the whole of arpresolve to arpresolve 2 for the sake 2007-12-31 23:48:06 +00:00
igmp_var.h Import rewrite of IPv4 socket multicast layer to support source-specific 2007-06-12 16:24:56 +00:00
igmp.c Move towards more explicit support for various network protocol stacks 2007-10-28 15:55:23 +00:00
igmp.h Stub out imported IGMPv3 definitions which clash with those of 2007-06-15 18:59:10 +00:00
in_cksum.c Add FBSDID to all files in netinet so that people can more 2007-10-07 20:44:24 +00:00
in_gif.c Add FBSDID to all files in netinet so that people can more 2007-10-07 20:44:24 +00:00
in_gif.h
in_mcast.c Over the past couple of years, there have been a number of reports relating 2007-08-06 22:06:36 +00:00
in_pcb.c When IPSEC fails to allocate policy state for an inpcb, and MAC is in use, 2007-12-22 10:06:11 +00:00
in_pcb.h Add padding for anticipated functionality 2007-12-07 01:46:13 +00:00
in_proto.c Add FBSDID to all files in netinet so that people can more 2007-10-07 20:44:24 +00:00
in_rmx.c Add FBSDID to all files in netinet so that people can more 2007-10-07 20:44:24 +00:00
in_systm.h
in_var.h Import rewrite of IPv4 socket multicast layer to support source-specific 2007-06-12 16:24:56 +00:00
in.c Add FBSDID to all files in netinet so that people can more 2007-10-07 20:44:24 +00:00
in.h Import rewrite of IPv4 socket multicast layer to support source-specific 2007-06-12 16:24:56 +00:00
ip6.h move RFC3542 related definitions into ip6.h. 2005-07-20 10:30:52 +00:00
ip_carp.c Add FBSDID to all files in netinet so that people can more 2007-10-07 20:44:24 +00:00
ip_carp.h Make sure that carp_header is 36 bytes long 2006-12-01 18:37:41 +00:00
ip_divert.c Merge first in a series of TrustedBSD MAC Framework KPI changes 2007-10-24 19:04:04 +00:00
ip_divert.h
ip_dummynet.c Workaround p->numbytes overflow, which can result in infinite loop inside 2007-12-25 09:36:51 +00:00
ip_dummynet.h 1) dummynet_io() declaration has changed. 2007-11-06 23:01:42 +00:00
ip_ecn.c Add FBSDID to all files in netinet so that people can more 2007-10-07 20:44:24 +00:00
ip_ecn.h
ip_encap.c Add FBSDID to all files in netinet so that people can more 2007-10-07 20:44:24 +00:00
ip_encap.h
ip_fastfwd.c Add FBSDID to all files in netinet so that people can more 2007-10-07 20:44:24 +00:00
ip_fw2.c If we are walking the IPv6 header chain and we hit an IPPROTO_NONE 2007-12-09 15:35:09 +00:00
ip_fw_pfil.c 1) dummynet_io() declaration has changed. 2007-11-06 23:01:42 +00:00
ip_fw.h Add support for filtering on Routing Header Type 0 and 2007-05-04 11:15:41 +00:00
ip_gre.c Add FBSDID to all files in netinet so that people can more 2007-10-07 20:44:24 +00:00
ip_gre.h Fix stack corruptions on amd64. 2006-01-21 10:44:34 +00:00
ip_icmp.c Continue to move from generic network entry points in the TrustedBSD MAC 2007-10-28 17:12:48 +00:00
ip_icmp.h Pass icmp_error() the MTU argument directly instead of 2005-05-04 13:09:19 +00:00
ip_id.c Add FBSDID to all files in netinet so that people can more 2007-10-07 20:44:24 +00:00
ip_input.c Consider the following situation: 2007-12-02 13:00:47 +00:00
ip_ipsec.c Add FBSDID to all files in netinet so that people can more 2007-10-07 20:44:24 +00:00
ip_ipsec.h Rename option IPSEC_FILTERGIF to IPSEC_FILTERTUNNEL. 2007-08-05 16:16:15 +00:00
ip_mroute.c Add FBSDID to all files in netinet so that people can more 2007-10-07 20:44:24 +00:00
ip_mroute.h Store the cached route in vifp in the normal send_packet() case. 2007-02-08 23:05:08 +00:00
ip_options.c Merge first in a series of TrustedBSD MAC Framework KPI changes 2007-10-24 19:04:04 +00:00
ip_options.h Normalize style a bit: reduce pseudo-randomness of comment layout and 2007-05-11 10:48:30 +00:00
ip_output.c Merge first in a series of TrustedBSD MAC Framework KPI changes 2007-10-24 19:04:04 +00:00
ip_var.h Import rewrite of IPv4 socket multicast layer to support source-specific 2007-06-12 16:24:56 +00:00
ip.h Remove IPTOS_CE and IPTOS_ECT constants. They were defined in RFC 2481 2007-10-19 12:46:15 +00:00
ipprotosw.h
pim_var.h Remove public declarations of variables that were forgotten when they were 2005-08-10 07:10:02 +00:00
pim.h
raw_ip.c Merge first in a series of TrustedBSD MAC Framework KPI changes 2007-10-24 19:04:04 +00:00
sctp_asconf.c - Bug fix managing congestion parameter on immediate 2007-10-01 03:22:29 +00:00
sctp_asconf.h - Get rid of unsused constants for sysctl variables. 2007-09-15 19:07:42 +00:00
sctp_auth.c - Locking compatiability changes. This involves adding 2007-09-08 11:35:11 +00:00
sctp_auth.h - fix send_failed notification contents 2007-06-09 13:46:57 +00:00
sctp_bsd_addr.c - sctp-iterator should run at PI_NET priority ...not 0. 2007-12-18 01:24:15 +00:00
sctp_bsd_addr.h - Fixes so we won't try to start a timer when we 2007-05-29 09:29:03 +00:00
sctp_cc_functions.c - Locking compatiability changes. This involves adding 2007-09-08 11:35:11 +00:00
sctp_cc_functions.h - Added some comments to tell where the htcp 2007-09-10 17:06:25 +00:00
sctp_constants.h - Change the Time Wait of vtags value to match the cookie-life 2007-10-30 14:09:24 +00:00
sctp_crc32.c - Copyright change, cisco's silly tool wants it to say: 2007-05-08 17:01:12 +00:00
sctp_crc32.h - Copyright change, cisco's silly tool wants it to say: 2007-05-08 17:01:12 +00:00
sctp_header.h - Fix address add handling to clear cached routes and source addresses 2007-08-24 00:53:53 +00:00
sctp_indata.c - Fix a bug in sctp_calc_rwnd() which resulted in wrong rwnd predictions. 2007-11-10 00:47:14 +00:00
sctp_indata.h - Fix stream reset so it limits the number of streams that can be listed 2007-06-22 13:50:56 +00:00
sctp_input.c - fix sctp_ifn initial refcount issue (prevents deletion) 2007-10-16 14:05:51 +00:00
sctp_input.h - Consolidate the code that free's chunks to actually also 2007-07-02 19:22:22 +00:00
sctp_lock_bsd.h - The address lock is changed to a rwlock. This 2007-09-18 15:16:39 +00:00
sctp_os_bsd.h - The address lock is changed to a rwlock. This 2007-09-18 15:16:39 +00:00
sctp_os.h - Fix address add handling to clear cached routes and source addresses 2007-08-24 00:53:53 +00:00
sctp_output.c - More fixes for lock misses on the transfer of data to 2007-12-07 01:32:14 +00:00
sctp_output.h - Bug fix managing congestion parameter on immediate 2007-10-01 03:22:29 +00:00
sctp_pcb.c - Change the Time Wait of vtags value to match the cookie-life 2007-10-30 14:09:24 +00:00
sctp_pcb.h - Change the Time Wait of vtags value to match the cookie-life 2007-10-30 14:09:24 +00:00
sctp_peeloff.c - Locking compatiability changes. This involves adding 2007-09-08 11:35:11 +00:00
sctp_peeloff.h - Copyright change, cisco's silly tool wants it to say: 2007-05-08 17:01:12 +00:00
sctp_structs.h - Found a problem in non-blocking sends. When 2007-12-04 14:41:48 +00:00
sctp_sysctl.c - DF bit was on for COOKIE-ECHO chunks. This is 2007-09-13 14:43:54 +00:00
sctp_sysctl.h - Get rid of unsused constants for sysctl variables. 2007-09-15 19:07:42 +00:00
sctp_timer.c - fix sctp_ifn initial refcount issue (prevents deletion) 2007-10-16 14:05:51 +00:00
sctp_timer.h - Incorrect error EAGAIN returned for invalid send on a locked 2007-09-13 10:36:43 +00:00
sctp_uio.h - The address lock is changed to a rwlock. This 2007-09-18 15:16:39 +00:00
sctp_usrreq.c - More fixes for lock misses on the transfer of data to 2007-12-07 01:32:14 +00:00
sctp_var.h - fix sctp_ifn initial refcount issue (prevents deletion) 2007-10-16 14:05:51 +00:00
sctp.h - Found a problem in non-blocking sends. When 2007-12-04 14:41:48 +00:00
sctputil.c - More fixes for lock misses on the transfer of data to 2007-12-07 01:32:14 +00:00
sctputil.h - Change the Time Wait of vtags value to match the cookie-life 2007-10-30 14:09:24 +00:00
tcp_debug.c Add FBSDID to all files in netinet so that people can more 2007-10-07 20:44:24 +00:00
tcp_debug.h o Use a define for a buffer size. 2007-03-24 22:15:02 +00:00
tcp_fsm.h Make tcpstates[] static, and make sure TCPSTATES is defined before 2007-07-30 11:06:42 +00:00
tcp_hostcache.c Add FBSDID to all files in netinet so that people can more 2007-10-07 20:44:24 +00:00
tcp_input.c Merge first in a series of TrustedBSD MAC Framework KPI changes 2007-10-24 19:04:04 +00:00
tcp_offload.c Remove extraneous debug statements. 2007-12-19 05:17:40 +00:00
tcp_offload.h Incorporate TCP offload hooks in to core TCP code. 2007-12-18 22:59:07 +00:00
tcp_output.c Centralize and correct computation of TCP-MD5 signature offset within 2007-11-30 23:46:51 +00:00
tcp_reass.c Add FBSDID to all files in netinet so that people can more 2007-10-07 20:44:24 +00:00
tcp_sack.c Coalesce two identical UCB licenses into a single license instance with 2007-05-11 11:21:43 +00:00
tcp_seq.h Remove T/TCP RFC1644 Connection Count comparison macros. They are no longer 2006-06-18 14:24:12 +00:00
tcp_subr.c Incorporate TCP offload hooks in to core TCP code. 2007-12-18 22:59:07 +00:00
tcp_syncache.c Fix bugs in the TCP syncache timeout code. including: 2007-12-19 16:56:28 +00:00
tcp_syncache.h Add interface for tcp offload to syncache: 2007-12-12 20:35:59 +00:00
tcp_timer.c Add FBSDID to all files in netinet so that people can more 2007-10-07 20:44:24 +00:00
tcp_timer.h Two changes: 2007-09-24 05:26:24 +00:00
tcp_timewait.c Merge first in a series of TrustedBSD MAC Framework KPI changes 2007-10-24 19:04:04 +00:00
tcp_usrreq.c tcp_usrreq.c:1.313 removed tcbinfo locking from tcp_usr_accept(), which 2008-01-23 21:15:51 +00:00
tcp_var.h Fix style issues with initial TCP offload commit 2007-12-12 23:31:49 +00:00
tcp.h Add socket option for setting and retrieving the congestion control algorithm. 2007-12-16 03:30:07 +00:00
tcpip.h
toedev.h Update the toedev's connect interface to reflect the fact that the inpcb 2007-12-16 05:30:21 +00:00
udp_usrreq.c Merge first in a series of TrustedBSD MAC Framework KPI changes 2007-10-24 19:04:04 +00:00
udp_var.h Further cleanup of UDPv4: 2007-07-10 09:30:46 +00:00
udp.h Gratuitous UDP restyling toward style(9) in 7.x. 2007-02-20 10:13:11 +00:00