Skip to content

Commit

Permalink
Reject all TCP packets in the CLOSED state.
Browse files Browse the repository at this point in the history
whitequark committed Jan 17, 2017
1 parent c10f37f commit 9570d66
Showing 1 changed file with 14 additions and 0 deletions.
14 changes: 14 additions & 0 deletions src/socket/tcp.rs
Original file line number Diff line number Diff line change
@@ -542,6 +542,8 @@ impl<'a> TcpSocket<'a> {
/// See [Socket::process](enum.Socket.html#method.process).
pub fn process(&mut self, _timestamp: u64, ip_repr: &IpRepr,
payload: &[u8]) -> Result<(), Error> {
if self.state == State::Closed { return Err(Error::Rejected) }

if ip_repr.protocol() != IpProtocol::Tcp { return Err(Error::Rejected) }

let packet = try!(TcpPacket::new(&payload[..ip_repr.payload_len()]));
@@ -1122,6 +1124,18 @@ mod test {
}, Err(Error::Rejected));
}

#[test]
fn test_closed_reject_after_listen() {
let mut s = socket();
s.listen(LOCAL_END).unwrap();
s.close();

send!(s, TcpRepr {
control: TcpControl::Syn,
..SEND_TEMPL
}, Err(Error::Rejected));
}

#[test]
fn test_closed_close() {
let mut s = socket();

0 comments on commit 9570d66

Please sign in to comment.