The branch stable/13 has been updated by tuexen:

URL: 
https://cgit.FreeBSD.org/src/commit/?id=15077bc4b91fc9c98eb5cd743d8386de2d3c1336

commit 15077bc4b91fc9c98eb5cd743d8386de2d3c1336
Author:     Michael Tuexen <[email protected]>
AuthorDate: 2021-03-22 14:58:49 +0000
Commit:     Michael Tuexen <[email protected]>
CommitDate: 2021-06-02 21:20:26 +0000

    tcp: improve handling of SYN segments in SYN-SENT state
    
    Ensure that the stack does not generate a DSACK block for user
    data received on a SYN segment in SYN-SENT state.
    
    Reviewed by:            rscheff
    Differential Revision:  https://reviews.freebsd.org/D29376
    Sponsored by:           Netflix, Inc.
    
    (cherry picked from commit 40f41ece765dc0b0907ca90796a1af4f4f89b2a0)
---
 sys/netinet/tcp_input.c       | 4 +++-
 sys/netinet/tcp_stacks/bbr.c  | 4 +++-
 sys/netinet/tcp_stacks/rack.c | 4 +++-
 3 files changed, 9 insertions(+), 3 deletions(-)

diff --git a/sys/netinet/tcp_input.c b/sys/netinet/tcp_input.c
index b3d4ef5cf5de..397cbc5084e6 100644
--- a/sys/netinet/tcp_input.c
+++ b/sys/netinet/tcp_input.c
@@ -3157,7 +3157,9 @@ dodata:                                                   
/* XXX */
                        thflags = tcp_reass(tp, th, &temp, &tlen, m);
                        tp->t_flags |= TF_ACKNOW;
                }
-               if ((tp->t_flags & TF_SACK_PERMIT) && (save_tlen > 0)) {
+               if ((tp->t_flags & TF_SACK_PERMIT) &&
+                   (save_tlen > 0) &&
+                   TCPS_HAVEESTABLISHED(tp->t_state)) {
                        if ((tlen == 0) && (SEQ_LT(save_start, save_rnxt))) {
                                /*
                                 * DSACK actually handled in the fastpath
diff --git a/sys/netinet/tcp_stacks/bbr.c b/sys/netinet/tcp_stacks/bbr.c
index 49ed7e992fba..cc20d6bf52ca 100644
--- a/sys/netinet/tcp_stacks/bbr.c
+++ b/sys/netinet/tcp_stacks/bbr.c
@@ -8371,7 +8371,9 @@ bbr_process_data(struct mbuf *m, struct tcphdr *th, 
struct socket *so,
                        thflags = tcp_reass(tp, th, &temp, &tlen, m);
                        tp->t_flags |= TF_ACKNOW;
                }
-               if ((tp->t_flags & TF_SACK_PERMIT) && (save_tlen > 0)) {
+               if ((tp->t_flags & TF_SACK_PERMIT) &&
+                   (save_tlen > 0) &&
+                   TCPS_HAVEESTABLISHED(tp->t_state)) {
                        if ((tlen == 0) && (SEQ_LT(save_start, save_rnxt))) {
                                /*
                                 * DSACK actually handled in the fastpath
diff --git a/sys/netinet/tcp_stacks/rack.c b/sys/netinet/tcp_stacks/rack.c
index 4a883ee32c79..0ee73a95a6d7 100644
--- a/sys/netinet/tcp_stacks/rack.c
+++ b/sys/netinet/tcp_stacks/rack.c
@@ -8683,7 +8683,9 @@ rack_process_data(struct mbuf *m, struct tcphdr *th, 
struct socket *so,
                        thflags = tcp_reass(tp, th, &temp, &tlen, m);
                        tp->t_flags |= TF_ACKNOW;
                }
-                if ((tp->t_flags & TF_SACK_PERMIT) && (save_tlen > 0)) {
+               if ((tp->t_flags & TF_SACK_PERMIT) &&
+                   (save_tlen > 0) &&
+                   TCPS_HAVEESTABLISHED(tp->t_state)) {
                         if ((tlen == 0) && (SEQ_LT(save_start, save_rnxt))) {
                                 /*
                                  * DSACK actually handled in the fastpath
_______________________________________________
[email protected] mailing list
https://lists.freebsd.org/mailman/listinfo/dev-commits-src-all
To unsubscribe, send any mail to "[email protected]"

Reply via email to