pf: fix struct pf_krule_global leak

Make sure we free all of the trees we allocated when we free the ruleset.
Found by 'kldunload pf' after a test run, now that the allocation is done from a
pf-specific malloc type.

Sponsored by:	Rubicon Communications, LLC ("Netgate")
This commit is contained in:
Kristof Provost committed 2025-09-02 23:10:21 +02:00
1 parent 44cc3b2731
commit 275ff85b25
3 files changed
+8 -1

No files matched your search

+1
View File
@@ -2614,6 +2614,7 @@ struct pf_kruleset *pf_find_kruleset(const char *);
struct pf_kruleset *pf_get_leaf_kruleset(char *, char **);
struct pf_kruleset *pf_find_or_create_kruleset(const char *);
void pf_rs_initialize(void);
void pf_rule_tree_free(struct pf_krule_global *);
struct pf_krule *pf_krule_alloc(void);
+1 -1
View File
@@ -1189,7 +1189,7 @@ pf_rule_tree_alloc(int flags)
return (tree);
}
static void
void
pf_rule_tree_free(struct pf_krule_global *tree)
{
+6
View File
@@ -336,6 +336,12 @@ pf_remove_if_empty_kruleset(struct pf_kruleset *ruleset)
int i;
while (ruleset != NULL) {
for (int i = 0; i < PF_RULESET_MAX; i++) {
pf_rule_tree_free(ruleset->rules[i].active.tree);
ruleset->rules[i].active.tree = NULL;
pf_rule_tree_free(ruleset->rules[i].inactive.tree);
ruleset->rules[i].inactive.tree = NULL;
}
if (ruleset == &pf_main_ruleset ||
!RB_EMPTY(&ruleset->anchor->children) ||
ruleset->anchor->refcnt > 0 || ruleset->tables > 0 ||