diff --git a/sys/netinet/tcp_input.c b/sys/netinet/tcp_input.c index f40d4c57aca..9baa878aa8e 100644 --- a/sys/netinet/tcp_input.c +++ b/sys/netinet/tcp_input.c @@ -1545,8 +1545,10 @@ tcp_do_segment(struct mbuf *m, struct tcphdr *th, struct socket *so, * TCP ECN processing. */ if (tp->t_flags2 & TF2_ECN_PERMIT) { - if (thflags & TH_CWR) + if (thflags & TH_CWR) { tp->t_flags2 &= ~TF2_ECN_SND_ECE; + tp->t_flags |= TF_ACKNOW; + } switch (iptos & IPTOS_ECN_MASK) { case IPTOS_ECN_CE: tp->t_flags2 |= TF2_ECN_SND_ECE; diff --git a/sys/netinet/tcp_stacks/rack.c b/sys/netinet/tcp_stacks/rack.c index 01b6ba031c3..a9989bb5358 100644 --- a/sys/netinet/tcp_stacks/rack.c +++ b/sys/netinet/tcp_stacks/rack.c @@ -7701,8 +7701,10 @@ rack_do_segment_nounlock(struct mbuf *m, struct tcphdr *th, struct socket *so, * this to occur after we've validated the segment. */ if (tp->t_flags2 & TF2_ECN_PERMIT) { - if (thflags & TH_CWR) + if (thflags & TH_CWR) { tp->t_flags2 &= ~TF2_ECN_SND_ECE; + tp->t_flags |= TF_ACKNOW; + } switch (iptos & IPTOS_ECN_MASK) { case IPTOS_ECN_CE: tp->t_flags2 |= TF2_ECN_SND_ECE;