On Tue, Oct 16, 2018 at 10:03:01AM +0200, Alexandr Nedvedicky wrote:
>     I also wonder if we should apply same change to wildcard anchors here:
They need fixing as well, but I have yet to look into it.

> diff --git a/sys/net/pf.c b/sys/net/pf.c
> index 0bdf90a8d13..5a5c739773a 100644
> --- a/sys/net/pf.c
> +++ b/sys/net/pf.c
> @@ -3129,10 +3129,32 @@ pf_step_into_anchor(struct pf_test_ctx *ctx, struct 
> pf_rule *r)
>       } else {
>               rv = pf_match_rule(ctx, &r->anchor->ruleset);
This comment is way too much, imho. How about this:

        Unless errors occured, stop iff any rule matched
        within quick anchors.

It's dense but we're inside pf_step_into_anchor() so context is given
while the condition speaks for itself as well. I'd like to leave
detailed explanations to the manual.

> -             if (rv != PF_TEST_FAIL && r->quick == PF_TEST_QUICK)
> +             if (rv != PF_TEST_FAIL && r->quick == PF_TEST_QUICK &&
> +                 *ctx->am == r)
>                       rv = PF_TEST_QUICK;
>       }
That makes sense and works as expected with *all* examples and real use
cases I could come up with.

Index: net/pf.c
===================================================================
RCS file: /cvs/src/sys/net/pf.c,v
retrieving revision 1.1076
diff -u -p -r1.1076 pf.c
--- net/pf.c    4 Oct 2018 20:25:59 -0000       1.1076
+++ net/pf.c    16 Oct 2018 11:32:10 -0000
@@ -3129,10 +3129,11 @@ pf_step_into_anchor(struct pf_test_ctx *
        } else {
                rv = pf_match_rule(ctx, &r->anchor->ruleset);
                /*
-                * Unless there was an error inside the anchor,
-                * retain its quick state.
+                * Unless errors occured, stop iff any rule matched
+                * within quick anchors.
                 */
-               if (rv != PF_TEST_FAIL && r->quick == PF_TEST_QUICK)
+               if (rv != PF_TEST_FAIL && r->quick == PF_TEST_QUICK &&
+                   *ctx->am == r)
                        rv = PF_TEST_QUICK;
        }
 

Reply via email to