Revert r1.406 "Close all pf transactions before opening a new one in DIOCGETRULES."
authorkn <kn@openbsd.org>
Wed, 28 Jun 2023 15:36:08 +0000 (15:36 +0000)
committerkn <kn@openbsd.org>
Wed, 28 Jun 2023 15:36:08 +0000 (15:36 +0000)
regress/sbin/pfctl panics with "rw_enter: pfioctl_rw locking against myself"
as reported by bluhm on bugs@.

sys/net/pf_ioctl.c

index 26e1fa0..cfcb0c1 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: pf_ioctl.c,v 1.408 2023/06/27 17:36:56 kn Exp $ */
+/*     $OpenBSD: pf_ioctl.c,v 1.409 2023/06/28 15:36:08 kn Exp $ */
 
 /*
  * Copyright (c) 2001 Daniel Hartmeier
@@ -118,7 +118,6 @@ int                  pf_states_clr(struct pfioc_state_kill *);
 int                     pf_states_get(struct pfioc_states *);
 
 struct pf_trans                *pf_open_trans(uint32_t);
-void                    pf_close_all_trans(uint32_t);
 struct pf_trans                *pf_find_trans(uint32_t, uint64_t);
 void                    pf_free_trans(struct pf_trans *);
 void                    pf_rollback_trans(struct pf_trans *);
@@ -1492,7 +1491,6 @@ pfioctl(dev_t dev, u_long cmd, caddr_t addr, int flags, struct proc *p)
                PF_UNLOCK();
                NET_UNLOCK();
 
-               pf_close_all_trans(minor(dev));
                t = pf_open_trans(minor(dev));
                pf_init_tgetrule(t, ruleset->anchor, ruleset_version, rule);
                pr->ticket = t->pft_ticket;
@@ -3271,19 +3269,6 @@ pf_open_trans(uint32_t unit)
        return (t);
 }
 
-void
-pf_close_all_trans(uint32_t unit)
-{
-       struct pf_trans *t, *nt;
-
-       rw_assert_wrlock(&pfioctl_rw);
-
-       LIST_FOREACH_SAFE(t, &pf_ioctl_trans, pft_entry, nt) {
-               if (t->pft_unit == unit)
-                       pf_rollback_trans(t);
-       }
-}
-
 struct pf_trans *
 pf_find_trans(uint32_t unit, uint64_t ticket)
 {