Page MenuHomeFreeBSD

D29194.id85561.diff
No OneTemporary

D29194.id85561.diff

diff --git a/sys/net/pfvar.h b/sys/net/pfvar.h
--- a/sys/net/pfvar.h
+++ b/sys/net/pfvar.h
@@ -1641,6 +1641,8 @@
struct pf_kruleset *pf_find_kruleset(const char *);
struct pf_kruleset *pf_find_or_create_kruleset(const char *);
void pf_rs_initialize(void);
+
+void pf_krule_free(struct pf_krule *);
#endif
/* The fingerprint functions can be linked into userland programs (tcpdump) */
diff --git a/sys/netpfil/pf/pf_ioctl.c b/sys/netpfil/pf/pf_ioctl.c
--- a/sys/netpfil/pf/pf_ioctl.c
+++ b/sys/netpfil/pf/pf_ioctl.c
@@ -466,15 +466,8 @@
pfi_kkif_unref(rule->kif);
pf_kanchor_remove(rule);
pf_empty_kpool(&rule->rpool.list);
- counter_u64_free(rule->evaluations);
- for (int i = 0; i < 2; i++) {
- counter_u64_free(rule->packets[i]);
- counter_u64_free(rule->bytes[i]);
- }
- counter_u64_free(rule->states_cur);
- counter_u64_free(rule->states_tot);
- counter_u64_free(rule->src_nodes);
- free(rule, M_PFRULE);
+
+ pf_krule_free(rule);
}
static void
@@ -1435,6 +1428,23 @@
}
#endif /* ALTQ */
+void
+pf_krule_free(struct pf_krule *rule)
+{
+ if (rule == NULL)
+ return;
+
+ counter_u64_free(rule->evaluations);
+ for (int i = 0; i < 2; i++) {
+ counter_u64_free(rule->packets[i]);
+ counter_u64_free(rule->bytes[i]);
+ }
+ counter_u64_free(rule->states_cur);
+ counter_u64_free(rule->states_tot);
+ counter_u64_free(rule->src_nodes);
+ free(rule, M_PFRULE);
+}
+
static void
pf_kpooladdr_to_pooladdr(const struct pf_kpooladdr *kpool,
struct pf_pooladdr *pool)
@@ -1990,15 +2000,7 @@
#undef ERROUT
DIOCADDRULE_error:
PF_RULES_WUNLOCK();
- counter_u64_free(rule->evaluations);
- for (int i = 0; i < 2; i++) {
- counter_u64_free(rule->packets[i]);
- counter_u64_free(rule->bytes[i]);
- }
- counter_u64_free(rule->states_cur);
- counter_u64_free(rule->states_tot);
- counter_u64_free(rule->src_nodes);
- free(rule, M_PFRULE);
+ pf_krule_free(rule);
if (kif)
pf_kkif_free(kif);
break;
@@ -2297,17 +2299,7 @@
#undef ERROUT
DIOCCHANGERULE_error:
PF_RULES_WUNLOCK();
- if (newrule != NULL) {
- counter_u64_free(newrule->evaluations);
- for (int i = 0; i < 2; i++) {
- counter_u64_free(newrule->packets[i]);
- counter_u64_free(newrule->bytes[i]);
- }
- counter_u64_free(newrule->states_cur);
- counter_u64_free(newrule->states_tot);
- counter_u64_free(newrule->src_nodes);
- free(newrule, M_PFRULE);
- }
+ pf_krule_free(newrule);
if (kif != NULL)
pf_kkif_free(kif);
break;

File Metadata

Mime Type
text/plain
Expires
Mon, Jun 8, 3:04 AM (3 h, 35 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
33805461
Default Alt Text
D29194.id85561.diff (2 KB)

Event Timeline