Be more conservative when T/TCP extensions are disabled. In particular,

do not send data and/or FIN on SYN segments in this case.
This commit is contained in:
Andras Olah 1996-01-17 09:35:23 +00:00
parent e4ff5c2aef
commit 81165e4880
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=13475

View file

@ -31,7 +31,7 @@
* SUCH DAMAGE. * SUCH DAMAGE.
* *
* @(#)tcp_output.c 8.4 (Berkeley) 5/24/95 * @(#)tcp_output.c 8.4 (Berkeley) 5/24/95
* $Id: tcp_output.c,v 1.16 1995/11/03 22:08:08 olah Exp $ * $Id: tcp_output.c,v 1.17 1995/12/05 17:46:35 wollman Exp $
*/ */
#include <sys/param.h> #include <sys/param.h>
@ -167,6 +167,19 @@ tcp_output(tp)
return 0; return 0;
} }
/*
* Be careful not to send data and/or FIN on SYN segments
* in cases when no CC option will be sent.
* This measure is needed to prevent interoperability problems
* with not fully conformant TCP implementations.
*/
if ((flags & TH_SYN) &&
((tp->t_flags & TF_NOOPT) || !(tp->t_flags & TF_REQ_CC) ||
((flags & TH_ACK) && !(tp->t_flags & TF_RCVD_CC)))) {
len = 0;
flags &= ~TH_FIN;
}
if (len < 0) { if (len < 0) {
/* /*
* If FIN has been sent but not acked, * If FIN has been sent but not acked,