A TCP stack is required to check SEG.ACK first, when processing a

segment in the SYN-SENT state as stated in Section 3.9 of RFC 793,
page 66. Ensure this is also done by the TCP RACK stack.

Reviewed by:		rrs@
MFC after:		1 week
Sponsored by:		Netflix, Inc.
Differential Revision:	https://reviews.freebsd.org/D18034
This commit is contained in:
Michael Tuexen 2018-11-22 20:05:57 +00:00
parent fef56019e9
commit ad2be38941
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=340782

View File

@ -6532,6 +6532,15 @@ rack_hpts_do_segment(struct mbuf *m, struct tcphdr *th, struct socket *so,
way_out = 4;
goto done_with_input;
}
/*
* If a segment with the ACK-bit set arrives in the SYN-SENT state
* check SEQ.ACK first as described on page 66 of RFC 793, section 3.9.
*/
if ((tp->t_state == TCPS_SYN_SENT) && (thflags & TH_ACK) &&
(SEQ_LEQ(th->th_ack, tp->iss) || SEQ_GT(th->th_ack, tp->snd_max))) {
rack_do_dropwithreset(m, tp, th, BANDLIM_RST_OPENPORT, tlen);
return;
}
/*
* Segment received on connection. Reset idle time and keep-alive
* timer. XXX: This should be done after segment validation to