瀏覽代碼

Fix condition for acceptable RST|ACK in TCP SYN-SENT state.

whitequark 8 年之前
父節點
當前提交
708f40d776
共有 1 個文件被更改,包括 2 次插入2 次删除
  1. 2 2
      src/socket/tcp.rs

+ 2 - 2
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);