Reject all TCP packets in the CLOSED state.

This commit is contained in:
whitequark 2017-01-17 00:24:47 +00:00
parent 4da2598ea7
commit a75f7d4bf0
1 changed files with 14 additions and 0 deletions

View File

@ -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();