aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKristof Provost <kp@FreeBSD.org>2021-04-15 11:38:56 +0000
committerKristof Provost <kp@FreeBSD.org>2021-04-19 12:31:47 +0000
commit4f1f67e88853ac9e3c2d8897cf6dab6cfda8d16e (patch)
tree87d5f829983b2175584d2c39a066b3bd007c2f42
parent4ae3a97e127cea14277b904af31483af7e6e2891 (diff)
downloadsrc-4f1f67e88853ac9e3c2d8897cf6dab6cfda8d16e.tar.gz
src-4f1f67e88853ac9e3c2d8897cf6dab6cfda8d16e.zip
pf: PFRULE_REFS should not be user-visible
Split the PFRULE_REFS flag from the rule_flag field. PFRULE_REFS is a kernel-internal flag and should not be exposed to or read from userspace. MFC after: 4 weeks Sponsored by: Rubicon Communications, LLC ("Netgate") Differential Revision: https://reviews.freebsd.org/D29778
-rw-r--r--sys/net/pfvar.h1
-rw-r--r--sys/netpfil/pf/pf.c12
-rw-r--r--sys/netpfil/pf/pf_ioctl.c2
3 files changed, 8 insertions, 7 deletions
diff --git a/sys/net/pfvar.h b/sys/net/pfvar.h
index 0372dfa65e57..efb9a382511e 100644
--- a/sys/net/pfvar.h
+++ b/sys/net/pfvar.h
@@ -378,6 +378,7 @@ struct pf_krule {
struct pf_rule_gid gid;
u_int32_t rule_flag;
+ uint32_t rule_ref;
u_int8_t action;
u_int8_t direction;
u_int8_t log;
diff --git a/sys/netpfil/pf/pf.c b/sys/netpfil/pf/pf.c
index e4bc6447b0d1..a5c4ef6bfbb4 100644
--- a/sys/netpfil/pf/pf.c
+++ b/sys/netpfil/pf/pf.c
@@ -1641,7 +1641,7 @@ pf_purge_expired_src_nodes()
pf_unlink_src_node(cur);
LIST_INSERT_HEAD(&freelist, cur, entry);
} else if (cur->rule.ptr != NULL)
- cur->rule.ptr->rule_flag |= PFRULE_REFS;
+ cur->rule.ptr->rule_ref |= PFRULE_REFS;
PF_HASHROW_UNLOCK(sh);
}
@@ -1783,11 +1783,11 @@ relock:
pf_unlink_state(s, PF_ENTER_LOCKED);
goto relock;
}
- s->rule.ptr->rule_flag |= PFRULE_REFS;
+ s->rule.ptr->rule_ref |= PFRULE_REFS;
if (s->nat_rule.ptr != NULL)
- s->nat_rule.ptr->rule_flag |= PFRULE_REFS;
+ s->nat_rule.ptr->rule_ref |= PFRULE_REFS;
if (s->anchor.ptr != NULL)
- s->anchor.ptr->rule_flag |= PFRULE_REFS;
+ s->anchor.ptr->rule_ref |= PFRULE_REFS;
s->kif->pfik_flags |= PFI_IFLAG_REFS;
if (s->rt_kif)
s->rt_kif->pfik_flags |= PFI_IFLAG_REFS;
@@ -1839,11 +1839,11 @@ pf_purge_unlinked_rules()
TAILQ_INIT(&tmpq);
PF_UNLNKDRULES_LOCK();
TAILQ_FOREACH_SAFE(r, &V_pf_unlinked_rules, entries, r1) {
- if (!(r->rule_flag & PFRULE_REFS)) {
+ if (!(r->rule_ref & PFRULE_REFS)) {
TAILQ_REMOVE(&V_pf_unlinked_rules, r, entries);
TAILQ_INSERT_TAIL(&tmpq, r, entries);
} else
- r->rule_flag &= ~PFRULE_REFS;
+ r->rule_ref &= ~PFRULE_REFS;
}
PF_UNLNKDRULES_UNLOCK();
diff --git a/sys/netpfil/pf/pf_ioctl.c b/sys/netpfil/pf/pf_ioctl.c
index 152fa9dafca1..e7965b7dcecd 100644
--- a/sys/netpfil/pf/pf_ioctl.c
+++ b/sys/netpfil/pf/pf_ioctl.c
@@ -426,7 +426,7 @@ pf_unlink_rule(struct pf_krulequeue *rulequeue, struct pf_krule *rule)
TAILQ_REMOVE(rulequeue, rule, entries);
PF_UNLNKDRULES_LOCK();
- rule->rule_flag |= PFRULE_REFS;
+ rule->rule_ref |= PFRULE_REFS;
TAILQ_INSERT_TAIL(&V_pf_unlinked_rules, rule, entries);
PF_UNLNKDRULES_UNLOCK();
}