From 0836bc949aa8f9094008e7f51f0ffd81b8ed31bf Mon Sep 17 00:00:00 2001 From: whitequark Date: Sun, 5 Mar 2017 05:31:12 +0000 Subject: [PATCH] Fix condition for acceptable RST|ACK in TCP SYN-SENT state. --- src/socket/tcp.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/socket/tcp.rs b/src/socket/tcp.rs index b15fc29..1263b1d 100644 --- a/src/socket/tcp.rs +++ b/src/socket/tcp.rs @@ -674,7 +674,7 @@ impl<'a> TcpSocket<'a> { (State::SynSent, TcpRepr { control: TcpControl::Rst, ack_number: Some(ack_number), .. }) => { - if ack_number != self.local_seq_no { + if ack_number != self.local_seq_no + 1 { net_trace!("[{}]{}:{}: unacceptable RST|ACK in response to initial SYN", self.debug_id, self.local_endpoint, self.remote_endpoint); return Err(Error::Malformed) @@ -1501,7 +1501,7 @@ mod test { send!(s, TcpRepr { control: TcpControl::Rst, seq_number: REMOTE_SEQ, - ack_number: Some(LOCAL_SEQ), + ack_number: Some(LOCAL_SEQ + 1), ..SEND_TEMPL }); assert_eq!(s.state, State::Closed);