Hi,
The behaviour of the PFRULE_SRCTRACK and max_states check was
unintentionally changed by this commit.
----------------------------
revision 1.964
date: 2016/01/25 18:49:57; author: sashan; state: Exp; lines: +18 -10;
commitid: KeemoLxcm7FS1oYy;
- plugging massive pf_state_key leak
OK mpi@ dlg@ sthen@
----------------------------
If we do not create a state after some limit was reached, pf still
passes the packet. We can restore the old behavior by setting
action later, after the checks.
ok?
bluhm
Index: net/pf.c
===================================================================
RCS file: /data/mirror/openbsd/cvs/src/sys/net/pf.c,v
retrieving revision 1.1186
diff -u -p -r1.1186 pf.c
--- net/pf.c 8 Sep 2023 13:40:52 -0000 1.1186
+++ net/pf.c 9 Oct 2023 22:37:14 -0000
@@ -4467,8 +4467,6 @@ pf_test_rule(struct pf_pdesc *pd, struct
goto cleanup;
}
- action = PF_PASS;
-
if (pd->virtual_proto != PF_VPROTO_FRAGMENT
&& !ctx.state_icmp && r->keep_state) {
@@ -4511,6 +4509,8 @@ pf_test_rule(struct pf_pdesc *pd, struct
#endif /* INET6 */
} else {
+ action = PF_PASS;
+
while ((ctx.ri = SLIST_FIRST(&ctx.rules))) {
SLIST_REMOVE_HEAD(&ctx.rules, entry);
pool_put(&pf_rule_item_pl, ctx.ri);