[2672] in Athena Bugs

home help back first fref pref prev next nref lref last post

an explanation of the dialup/B11 lockup we see occasionally

daemon@ATHENA.MIT.EDU (John T Kohl)
Fri Jul 28 17:48:01 1989

Date: Fri, 28 Jul 89 17:47:41 EDT
From: John T Kohl <jtkohl@ATHENA.MIT.EDU>
To: bugs@ATHENA.MIT.EDU, jis@ATHENA.MIT.EDU
   From: esj@manatee.cis.ufl.edu (Eric S. Johnson)
   Newsgroups: comp.bugs.4bsd
   Summary: In Berkeley 4.3+VJ TCP code
   Date: 28 Jul 89 20:30:35 GMT
   Reply-To: esj@manatee.cis.ufl.edu (Eric S. Johnson)
   Organization: UF CIS Department


   (BSD box below means any BSDish machine with the Van Jacobson
   TCP routines posted to comp.bugs.4bsd.ucb-fixes last year)

   We have a PC here which runs a TCP/IP package which comes from
   a 3 letter company. When used to FTP to a BSD box, a get command
   causes it to reply to the SYN (sent from BSD box) on FTP-DATA with
   a SYN/ACK TCP packet with a option of MSS=0. To me this means the 
   PC and its TCP/IP software is broken. 

   But... BSD, upon receipt of this SYN/ACK, option MSS=0 packet, proceeds
   to start sending continuous ACK packets, with no data (the third part of
   the handshake). This continual ACKing will lock up the UNIX box in question,
   and wreck havoc on gateways between PC and victim.

   A quick look through tcp_output.c shows these code segments to be 
   the *apparent* cause:

   tcp_output(tp)
	   register struct tcpcb *tp;
   {
   .
   .
   .
   again:
	   sendalot = 0;
   .
   .
   .
	   if (len > tp->t_maxseg) {
		   len = tp->t_maxseg;
		   sendalot = 1;
	   }
   .
   .
   .
	   if (sendalot)
		   goto again;
	   return (0);
   }


   I am not a BSD TCP/IP wiz, but if len is >0 when some dopey PC has
   requested a tcp mss=0, then packet flooding is what would be expected
   from this code eh? Not terribly robust.

   So, if I am misunderstanding the cause of the problem, please correct me.
   And in any case, how do I fix it?

   Ej

home help back first fref pref prev next nref lref last post