diff options
-rw-r--r-- | sys/net/pf.c | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/sys/net/pf.c b/sys/net/pf.c index 3fd065b102a..6a3ed2a8ed8 100644 --- a/sys/net/pf.c +++ b/sys/net/pf.c @@ -1,4 +1,4 @@ -/* $OpenBSD: pf.c,v 1.588 2008/06/10 22:39:31 mcbride Exp $ */ +/* $OpenBSD: pf.c,v 1.589 2008/06/10 22:59:13 reyk Exp $ */ /* * Copyright (c) 2001 Daniel Hartmeier @@ -4013,6 +4013,15 @@ pf_tcp_track_sloppy(struct pf_state_peer *src, struct pf_state_peer *dst, REASON_SET(reason, PFRES_SRCLIMIT); return (PF_DROP); } + } else if (src->state == TCPS_CLOSING && + dst->state == TCPS_ESTABLISHED && + dst->seqlo == 0) { + /* + * Handle the closing of half connections where we + * don't see the full bidirectional FIN/ACK+ACK + * handshake. + */ + dst->state = TCPS_CLOSING; } } if (th->th_flags & TH_RST) |