aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGarrett Wollman <wollman@FreeBSD.org>1997-02-21 16:30:31 +0000
committerGarrett Wollman <wollman@FreeBSD.org>1997-02-21 16:30:31 +0000
commitef53690bb495367dfad069994f4e295769e9f162 (patch)
tree32b2ec73999ce12a35fd43130ae2d38531aa8cad
parent5d156f4397af40f045b64b132e1a531ba65a09ec (diff)
downloadsrc-ef53690bb495367dfad069994f4e295769e9f162.tar.gz
src-ef53690bb495367dfad069994f4e295769e9f162.zip
Fix potential crash where a user attempts to perform an implied
connect in TCP while sending urgent data. It is not clear what purpose is served by doing this, but there's no good reason why it shouldn't work. Submitted by: tjevans@raleigh.ibm.com via wpaul
Notes
Notes: svn path=/head/; revision=22962
-rw-r--r--sys/netinet/tcp_usrreq.c15
1 files changed, 14 insertions, 1 deletions
diff --git a/sys/netinet/tcp_usrreq.c b/sys/netinet/tcp_usrreq.c
index 5207da9f6016..fbed6af24302 100644
--- a/sys/netinet/tcp_usrreq.c
+++ b/sys/netinet/tcp_usrreq.c
@@ -31,7 +31,7 @@
* SUCH DAMAGE.
*
* From: @(#)tcp_usrreq.c 8.2 (Berkeley) 1/3/94
- * $FreeBSD$
+ * $Id$
*/
#include <sys/param.h>
@@ -389,6 +389,19 @@ tcp_usr_send(struct socket *so, int flags, struct mbuf *m, struct mbuf *nam,
* Otherwise, snd_up should be one lower.
*/
sbappend(&so->so_snd, m);
+ if (nam && tp->t_state < TCPS_SYN_SENT) {
+ /*
+ * Do implied connect if not yet connected,
+ * initialize window to default value, and
+ * initialize maxseg/maxopd using peer's cached
+ * MSS.
+ */
+ error = tcp_connect(tp, nam);
+ if (error)
+ goto out;
+ tp->snd_wnd = TTCP_CLIENT_SND_WND;
+ tcp_mss(tp, -1);
+ }
tp->snd_up = tp->snd_una + so->so_snd.sb_cc;
tp->t_force = 1;
error = tcp_output(tp);