The branch main has been updated by kp:

URL: 
https://cgit.FreeBSD.org/src/commit/?id=37101926c920e9fd9b7d89b1ed480103305be4c4

commit 37101926c920e9fd9b7d89b1ed480103305be4c4
Author:     Kristof Provost <k...@freebsd.org>
AuthorDate: 2025-01-07 14:17:51 +0000
Commit:     Kristof Provost <k...@freebsd.org>
CommitDate: 2025-01-14 08:54:18 +0000

    pf improve the icmp direction check
    
    Deal correctly with af-to states (there only one state and it's direction is
    always PF_IN).
    
    ok mcbride, claudio on previous version, ok henning, "looks good" deraadt
    
    We deviate from the OpenBSD change in that we don't include the "don't 
exclude
    icmp echo replies from the test." part of the commit. This is a user-visible
    behaviour change, and is likely to break existing configurations. For 
example,
    it breaks the netpfil/common/dummynet:pf_queue tests.
    
    Obtained from:  OpenBSD, mikeb <mi...@openbsd.org>, b96cc44e9e
    Sponsored by:   Rubicon Communications, LLC ("Netgate")
---
 sys/netpfil/pf/pf.c | 9 +++++++--
 1 file changed, 7 insertions(+), 2 deletions(-)

diff --git a/sys/netpfil/pf/pf.c b/sys/netpfil/pf/pf.c
index dd337c0aef93..bee5690e02c4 100644
--- a/sys/netpfil/pf/pf.c
+++ b/sys/netpfil/pf/pf.c
@@ -7679,9 +7679,14 @@ pf_icmp_state_lookup(struct pf_state_key_cmp *key, 
struct pf_pdesc *pd,
                return (-1);
 
        /* Is this ICMP message flowing in right direction? */
+       if ((*state)->key[PF_SK_WIRE]->af != (*state)->key[PF_SK_STACK]->af)
+               direction = (pd->af == (*state)->key[PF_SK_WIRE]->af) ?
+                   PF_IN : PF_OUT;
+       else
+               direction = (*state)->direction;
        if ((*state)->rule->type &&
-           (((!inner && (*state)->direction == direction) ||
-           (inner && (*state)->direction != direction)) ?
+           (((!inner && direction == pd->dir) ||
+           (inner && direction != pd->dir)) ?
            PF_IN : PF_OUT) != icmp_dir) {
                if (V_pf_status.debug >= PF_DEBUG_MISC) {
                        printf("pf: icmp type %d in wrong direction (%d): ",

Reply via email to