svn commit: r360180 - in head/sys/netinet: . tcp_stacks

Richard Scheffenegger rscheff at FreeBSD.org
Wed Apr 22 00:16:43 UTC 2020


Author: rscheff
Date: Wed Apr 22 00:16:42 2020
New Revision: 360180
URL: https://svnweb.freebsd.org/changeset/base/360180

Log:
  revert rS360143 - Correctly set up  initial cwnd
  due to syzkaller panics found
  
  Reported by:	tuexen
  Approved by:	tuexen (mentor)
  Sponsored by:	NetApp, Inc.

Modified:
  head/sys/netinet/tcp_input.c
  head/sys/netinet/tcp_stacks/bbr.c
  head/sys/netinet/tcp_stacks/rack.c

Modified: head/sys/netinet/tcp_input.c
==============================================================================
--- head/sys/netinet/tcp_input.c	Tue Apr 21 23:38:54 2020	(r360179)
+++ head/sys/netinet/tcp_input.c	Wed Apr 22 00:16:42 2020	(r360180)
@@ -2374,6 +2374,12 @@ tcp_do_segment(struct mbuf *m, struct tcphdr *th, stru
 		if (IS_FASTOPEN(tp->t_flags) && tp->t_tfo_pending) {
 			tcp_fastopen_decrement_counter(tp->t_tfo_pending);
 			tp->t_tfo_pending = NULL;
+
+			/*
+			 * Account for the ACK of our SYN prior to
+			 * regular ACK processing below.
+			 */
+			tp->snd_una++;
 		}
 		if (tp->t_flags & TF_NEEDFIN) {
 			tcp_state_change(tp, TCPS_FIN_WAIT_1);
@@ -2393,12 +2399,6 @@ tcp_do_segment(struct mbuf *m, struct tcphdr *th, stru
 				cc_conn_init(tp);
 			tcp_timer_activate(tp, TT_KEEP, TP_KEEPIDLE(tp));
 		}
-		if (SEQ_GT(th->th_ack, tp->snd_una))
-			/*
-			 * Account for the ACK of our SYN prior to
-			 * regular ACK processing below.
-			 */
-			tp->snd_una++;
 		/*
 		 * If segment contains data or ACK, will call tcp_reass()
 		 * later; if not, do so now to pass queued data to user.

Modified: head/sys/netinet/tcp_stacks/bbr.c
==============================================================================
--- head/sys/netinet/tcp_stacks/bbr.c	Tue Apr 21 23:38:54 2020	(r360179)
+++ head/sys/netinet/tcp_stacks/bbr.c	Wed Apr 22 00:16:42 2020	(r360180)
@@ -9325,6 +9325,11 @@ bbr_do_syn_recv(struct mbuf *m, struct tcphdr *th, str
 
 		tcp_fastopen_decrement_counter(tp->t_tfo_pending);
 		tp->t_tfo_pending = NULL;
+		/*
+		 * Account for the ACK of our SYN prior to regular
+		 * ACK processing below.
+		 */
+		tp->snd_una++;
 	}
 	/*
 	 * Make transitions: SYN-RECEIVED  -> ESTABLISHED SYN-RECEIVED* ->
@@ -9347,12 +9352,6 @@ bbr_do_syn_recv(struct mbuf *m, struct tcphdr *th, str
 		if (!IS_FASTOPEN(tp->t_flags))
 			cc_conn_init(tp);
 	}
-	if (SEQ_GT(th->th_ack, tp->snd_una))
-		/*
-		 * Account for the ACK of our SYN prior to
-		 * regular ACK processing below.
-		 */
-		tp->snd_una++;
 	/*
 	 * If segment contains data or ACK, will call tcp_reass() later; if
 	 * not, do so now to pass queued data to user.

Modified: head/sys/netinet/tcp_stacks/rack.c
==============================================================================
--- head/sys/netinet/tcp_stacks/rack.c	Tue Apr 21 23:38:54 2020	(r360179)
+++ head/sys/netinet/tcp_stacks/rack.c	Wed Apr 22 00:16:42 2020	(r360180)
@@ -6539,6 +6539,12 @@ rack_do_syn_recv(struct mbuf *m, struct tcphdr *th, st
 	if (IS_FASTOPEN(tp->t_flags) && tp->t_tfo_pending) {
 		tcp_fastopen_decrement_counter(tp->t_tfo_pending);
 		tp->t_tfo_pending = NULL;
+
+		/*
+		 * Account for the ACK of our SYN prior to
+		 * regular ACK processing below.
+		 */
+		tp->snd_una++;
 	}
 	if (tp->t_flags & TF_NEEDFIN) {
 		tcp_state_change(tp, TCPS_FIN_WAIT_1);
@@ -6556,12 +6562,6 @@ rack_do_syn_recv(struct mbuf *m, struct tcphdr *th, st
 		if (!IS_FASTOPEN(tp->t_flags))
 			cc_conn_init(tp);
 	}
-	if (SEQ_GT(th->th_ack, tp->snd_una))
-		/*
-		 * Account for the ACK of our SYN prior to
-		 * regular ACK processing below.
-		 */
-		tp->snd_una++;
 	/*
 	 * If segment contains data or ACK, will call tcp_reass() later; if
 	 * not, do so now to pass queued data to user.


More information about the svn-src-all mailing list