Apply by doing: cd /usr/src patch -p0 < 004_pf.patch And then build, install and boot a new kernel: cd /usr/src/sys/arch/`arch -s`/conf config GENERIC cd ../compile/GENERIC make depend && make && sudo make install If you are using the multiprocessor kernel, replace GENERIC by GENERIC.MP above. Index: sys/net/pf.c =================================================================== RCS file: /cvs/src/sys/net/pf.c,v retrieving revision 1.552 retrieving revision 1.552.2.1 diff -u -p -r1.552 -r1.552.2.1 --- sys/net/pf.c 21 Aug 2007 15:57:27 -0000 1.552 +++ sys/net/pf.c 27 Nov 2007 16:37:57 -0000 1.552.2.1 @@ -819,6 +819,8 @@ pf_insert_state(struct pfi_kif *kif, str TAILQ_FOREACH(sp, &cur->states, next) if (sp->kif == kif) { /* collision! */ pf_stateins_err("tree_lan_ext", s, kif); + pf_detach_state(s, + PF_DT_SKIP_LANEXT|PF_DT_SKIP_EXTGWY); return (-1); } pf_detach_state(s, PF_DT_SKIP_LANEXT|PF_DT_SKIP_EXTGWY); @@ -961,10 +963,8 @@ pf_src_tree_remove_state(struct pf_state u_int32_t timeout; if (s->src_node != NULL) { - if (s->state_key->proto == IPPROTO_TCP) { - if (s->src.tcp_est) - --s->src_node->conn; - } + if (s->src.tcp_est) + --s->src_node->conn; if (--s->src_node->states <= 0) { timeout = s->rule.ptr->timeout[PFTM_SRC_NODE]; if (!timeout)