Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 30 Jun 1997 22:42:17 -0700 (PDT)
From:      John Polstra <jdp@FreeBSD.ORG>
To:        cvs-committers@FreeBSD.ORG, cvs-all@FreeBSD.ORG, cvs-sys@FreeBSD.ORG
Subject:   cvs commit: src/sys/netinet tcp_input.c
Message-ID:  <199707010542.WAA23977@freefall.freebsd.org>

next in thread | raw e-mail | index | archive | help
jdp         1997/06/30 22:42:17 PDT

  Modified files:
    sys/netinet          tcp_input.c 
  Log:
  Fix a bug (apparently very old) that can cause a TCP connection to
  be dropped when it has an unusual traffic pattern.  For full details
  as well as a test case that demonstrates the failure, see the
  referenced PR.
  
  Under certain circumstances involving the persist state, it is
  possible for the receive side's tp->rcv_nxt to advance beyond its
  tp->rcv_adv.  This causes (tp->rcv_adv - tp->rcv_nxt) to become
  negative.  However, in the code affected by this fix, that difference
  was interpreted as an unsigned number by max().  Since it was
  negative, it was taken as a huge unsigned number.  The effect was
  to cause the receiver to believe that its receive window had negative
  size, thereby rejecting all received segments including ACKs.  As
  the test case shows, this led to fruitless retransmissions and
  eventually to a dropped connection.  Even connections using the
  loopback interface could be dropped.  The fix substitutes the signed
  imax() for the unsigned max() function.
  
  PR:		closes kern/3998
  Reviewed by:	davidg, fenner, wollman
  
  Revision  Changes    Path
  1.59      +2 -2      src/sys/netinet/tcp_input.c



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199707010542.WAA23977>