freebsd kernel with SKQ
Go to file
Robert Watson 0daccb9c94 In the current world order, solisten() implements the state transition of
a socket from a regular socket to a listening socket able to accept new
connections.  As part of this state transition, solisten() calls into the
protocol to update protocol-layer state.  There were several bugs in this
implementation that could result in a race wherein a TCP SYN received
in the interval between the protocol state transition and the shortly
following socket layer transition would result in a panic in the TCP code,
as the socket would be in the TCPS_LISTEN state, but the socket would not
have the SO_ACCEPTCONN flag set.

This change does the following:

- Pushes the socket state transition from the socket layer solisten() to
  to socket "library" routines called from the protocol.  This permits
  the socket routines to be called while holding the protocol mutexes,
  preventing a race exposing the incomplete socket state transition to TCP
  after the TCP state transition has completed.  The check for a socket
  layer state transition is performed by solisten_proto_check(), and the
  actual transition is performed by solisten_proto().

- Holds the socket lock for the duration of the socket state test and set,
  and over the protocol layer state transition, which is now possible as
  the socket lock is acquired by the protocol layer, rather than vice
  versa.  This prevents additional state related races in the socket
  layer.

This permits the dual transition of socket layer and protocol layer state
to occur while holding locks for both layers, making the two changes
atomic with respect to one another.  Similar changes are likely require
elsewhere in the socket/protocol code.

Reported by:		Peter Holm <peter@holm.cc>
Review and fixes from:	emax, Antoine Brodin <antoine.brodin@laposte.net>
Philosophical head nod:	gnn
2005-02-21 21:58:17 +00:00
bin Change /bin/sh so *it* implements the processing needed for scripts to 2005-02-16 05:17:58 +00:00
contrib This commit was generated by cvs2svn to compensate for changes in r142129, 2005-02-20 17:33:34 +00:00
crypto Better Xlist command line. 2004-10-28 16:13:28 +00:00
etc Add support for cpufreq to power_profile(8). Values for on/offline cpu 2005-02-06 21:12:25 +00:00
games Make the on-disk format of .dat files produced by strfile(8) 2005-02-17 18:06:37 +00:00
gnu Fixed compilation warnings. 2005-02-21 21:02:25 +00:00
include The Intel C/C++ compiler doesn't require a typedef for _Bool when compiling 2005-02-19 13:47:33 +00:00
kerberos5 NODOCCOMPRESS -> NO_DOCCOMPRESS 2004-12-21 09:33:47 +00:00
lib Fix EOVERFLOW detection in vswprintf(3) 2005-02-21 19:41:44 +00:00
libexec Add some consistency checks to the signal-related code. 2005-02-16 11:35:51 +00:00
release MFR4_11: SA-04:16.fetch (+MFC), SA-04:17.procfs (+MFC). 2005-02-21 20:53:57 +00:00
rescue Add chroot. It can be a real lifesaver, and adds less than 2 kB. 2005-02-07 21:19:18 +00:00
sbin Document the terabyte "-s" parameter in the usage string. 2005-02-21 09:09:07 +00:00
secure Define PLATFORM correctly when cross-building. 2005-02-16 20:55:47 +00:00
share Note addition of est(4) 2005-02-20 20:30:47 +00:00
sys In the current world order, solisten() implements the state transition of 2005-02-21 21:58:17 +00:00
tools Add a simple regression test for stream UNIX domain sockets and the 2005-02-20 22:21:53 +00:00
usr.bin Fix an overflow when calculating the number of kilobytes from the 2005-02-21 14:35:00 +00:00
usr.sbin Fix the same problem that was fixed in rev. 1.6 and got reintroduced 2005-02-19 21:32:21 +00:00
COPYRIGHT Complete 2005 transition. 2005-01-01 07:29:20 +00:00
MAINTAINERS Drop hold on patch. ENOTIME for long-stalled ideas here. Too busy elsewhere. 2004-12-29 03:49:58 +00:00
Makefile NOSHARED -> NO_SHARED 2004-12-21 09:59:45 +00:00
Makefile.inc1 Add lorder(1) to the list of bootstrap-tools. 2005-02-19 10:25:42 +00:00
README KerberosIV de-orbit burn continues. Disconnect from "make world". 2003-03-08 10:01:26 +00:00
UPDATING Fix disorder. 2005-02-07 09:15:52 +00:00

This is the top level of the FreeBSD source directory.  This file
was last revised on:
$FreeBSD$

For copyright information, please see the file COPYRIGHT in this
directory (additional copyright information also exists for some
sources in this tree - please see the specific source directories for
more information).

The Makefile in this directory supports a number of targets for
building components (or all) of the FreeBSD source tree, the most
commonly used one being ``world'', which rebuilds and installs
everything in the FreeBSD system from the source tree except the
kernel, the kernel-modules and the contents of /etc.  The
``buildkernel'' and ``installkernel'' targets build and install
the kernel and the modules (see below).  Please see the top of
the Makefile in this directory for more information on the
standard build targets and compile-time flags.

Building a kernel is a somewhat more involved process, documentation
for which can be found at:
   http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/kernelconfig.html
And in the config(8) man page.
Note: If you want to build and install the kernel with the
``buildkernel'' and ``installkernel'' targets, you might need to build
world before.  More information is available in the handbook.

The sample kernel configuration files reside in the sys/<arch>/conf
sub-directory (assuming that you've installed the kernel sources), the
file named GENERIC being the one used to build your initial installation
kernel.  The file NOTES contains entries and documentation for all possible
devices, not just those commonly used.  It is the successor of the ancient
LINT file, but in contrast to LINT, it is not buildable as a kernel but a
pure reference and documentation file.


Source Roadmap:
---------------
bin		System/user commands.

contrib		Packages contributed by 3rd parties.

crypto		Cryptography stuff (see crypto/README).

etc		Template files for /etc.

games		Amusements.

gnu		Various commands and libraries under the GNU Public License.
		Please see gnu/COPYING* for more information.

include		System include files.

kerberos5	Kerberos5 (Heimdal) package.

lib		System libraries.

libexec		System daemons.

release		Release building Makefile & associated tools.

sbin		System commands.

secure		Cryptographic libraries and commands.

share		Shared resources.

sys		Kernel sources.

tools		Utilities for regression testing and miscellaneous tasks.

usr.bin		User commands.

usr.sbin	System administration commands.


For information on synchronizing your source tree with one or more of
the FreeBSD Project's development branches, please see:

  http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/synching.html