diff options
Diffstat (limited to 'sys/netpfil/pf/pf_ruleset.c')
| -rw-r--r-- | sys/netpfil/pf/pf_ruleset.c | 10 | 
1 files changed, 8 insertions, 2 deletions
| diff --git a/sys/netpfil/pf/pf_ruleset.c b/sys/netpfil/pf/pf_ruleset.c index 039908a53126..4e16eaa76f9d 100644 --- a/sys/netpfil/pf/pf_ruleset.c +++ b/sys/netpfil/pf/pf_ruleset.c @@ -59,8 +59,8 @@  #error "Kernel only file. Please use sbin/pfctl/pf_ruleset.c instead."  #endif -#define rs_malloc(x)		malloc(x, M_TEMP, M_NOWAIT|M_ZERO) -#define rs_free(x)		free(x, M_TEMP) +#define rs_malloc(x)		malloc(x, M_PF, M_NOWAIT|M_ZERO) +#define rs_free(x)		free(x, M_PF)  VNET_DEFINE(struct pf_kanchor_global,	pf_anchors);  VNET_DEFINE(struct pf_kanchor,		pf_main_anchor); @@ -346,6 +346,12 @@ pf_remove_if_empty_kruleset(struct pf_kruleset *ruleset)  			    !TAILQ_EMPTY(ruleset->rules[i].inactive.ptr) ||  			    ruleset->rules[i].inactive.open)  				return; +		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; +		}  		RB_REMOVE(pf_kanchor_global, &V_pf_anchors, ruleset->anchor);  		if ((parent = ruleset->anchor->parent) != NULL)  			RB_REMOVE(pf_kanchor_node, &parent->children, | 
