kern/74935: TCP simultaneous open fails.
Qing Li
Qing.Li at bluecoat.com
Fri Dec 10 18:20:27 PST 2004
>Number: 74935
>Category: kern
>Synopsis: TCP simultaneous open fails.
>Confidential: no
>Severity: critical
>Priority: high
>Responsible: freebsd-bugs
>State: open
>Quarter:
>Keywords:
>Date-Required:
>Class: sw-bug
>Submitter-Id: current-users
>Arrival-Date: Sat Dec 11 02:20:24 GMT 2004
>Closed-Date:
>Last-Modified:
>Originator: Qing Li
>Release: FreeBSD 6.0-CURRENT
>Organization:
Blue Coat Systems, Inc.
>Environment:
FreeBSD heavygear.bluecoat.com 6.0-CURRENT FreeBSD 6.0-CURRENT #1: Wed Nov 10 10:44:35 UTC 2004 root at heavygear.bluecoat.com:/usr/obj/usr/src/sys/QING i386
>Description:
TCP simulataneous open fails and connection cannot be established.
>How-To-Repeat:
Do a TCP simultaneous open using whatever method.
I used ANVL TCP-Core test case 5.25 to verify this problem.
>Fix:
Index: tcp_input.c
===================================================================
RCS file: /home/ncvs/src/sys/netinet/tcp_input.c,v
retrieving revision 1.261
diff -c -r1.261 tcp_input.c
*** tcp_input.c 28 Nov 2004 11:06:22 -0000 1.261
--- tcp_input.c 11 Dec 2004 02:08:44 -0000
***************
*** 1400,1406 ****
* SYN-SENT* -> SYN-RECEIVED*
* If there was no CC option, clear cached CC value.
*/
! tp->t_flags |= TF_ACKNOW;
callout_stop(tp->tt_rexmt);
tp->t_state = TCPS_SYN_RECEIVED;
}
--- 1400,1406 ----
* SYN-SENT* -> SYN-RECEIVED*
* If there was no CC option, clear cached CC value.
*/
! tp->t_flags |= (TF_ACKNOW | TF_NEEDSYN);
callout_stop(tp->tt_rexmt);
tp->t_state = TCPS_SYN_RECEIVED;
}
heavygear# cvs diff -c tcp_output.c
Index: tcp_output.c
===================================================================
RCS file: /home/ncvs/src/sys/netinet/tcp_output.c,v
retrieving revision 1.106
diff -c -r1.106 tcp_output.c
*** tcp_output.c 29 Nov 2004 18:47:27 -0000 1.106
--- tcp_output.c 11 Dec 2004 02:09:12 -0000
***************
*** 327,333 ****
* know that foreign host supports TAO, suppress sending segment.
*/
if ((flags & TH_SYN) && SEQ_GT(tp->snd_nxt, tp->snd_una)) {
! flags &= ~TH_SYN;
off--, len++;
}
--- 327,334 ----
* know that foreign host supports TAO, suppress sending segment.
*/
if ((flags & TH_SYN) && SEQ_GT(tp->snd_nxt, tp->snd_una)) {
! if (tp->t_state != TCPS_SYN_RECEIVED)
! flags &= ~TH_SYN;
off--, len++;
}
>Release-Note:
>Audit-Trail:
>Unformatted:
More information about the freebsd-bugs
mailing list