netfilter: nf_tables: release objects on netns destruction
Subsystems (2)
Pablo Neira Ayuso
maintainerPATCH 1/1 netfilter: nf_tables: release objects on netns destruction
We have to release the existing objects on netns removal otherwise we leak them.
Reported-by Patrick McHardy <[email protected]>
Signed-off-by Pablo Neira Ayuso <[email protected]>
--- net/netfilter/nf_tables_api.c | 41 ++++++++++++++++++++++++++++++++++++++++- 1 file changed, 40 insertions(+), 1 deletion(-)
net/netfilter/nf_tables_api.c +40 -1
@@ -4584,7 +4584,7 @@ int nft_data_dump(struct sk_buff *skb, int attr, const struct nft_data *data, }EXPORT_SYMBOL_GPL (nft_data_dump); -static int nf_tables_init_net (struct net *net) +static int __net_init nf_tables_init_net (struct net *net) {INIT_LIST_HEAD (&net->nft.af_info);INIT_LIST_HEAD (&net->nft.commit_list);
@@ -4592,8 +4592,47 @@ static int nf_tables_init_net(struct net *net)return 0 ; } +static void __net_exit nf_tables_exit_net(struct net *net) +{ +struct nft_table *table, *nt; +struct nft_chain *chain, *nc; +struct nft_rule *rule, *nr; +struct nft_set *set, *ns; +struct nft_af_info *afi; +struct nft_ctx ctx; + +nfnl_lock (NFNL_SUBSYS_NFTABLES ); +list_for_each_entry (afi, &net->nft.af_info, list) { + ctx.afi = afi; +list_for_each_entry_safe (table, nt, &afi->tables, list) { + ctx.table = table; +list_for_each_entry (chain, &table->chains, list) { + ctx.chain = chain; +list_for_each_entry_safe (rule, nr, &chain->rules, list) { +list_del (&rule->list); +nf_tables_rule_destroy (&ctx, rule); + } + } +list_for_each_entry_safe (chain, nc, &table->chains, list) { +list_del (&chain->list); +nf_tables_unregister_hooks (table, chain, + afi->nops); +nf_tables_chain_destroy (chain); + } +list_for_each_entry_safe (set, ns, &table->sets, list) { +list_del (&set->list); +nft_set_destroy (set); + } +list_del (&table->list); +nf_tables_table_destroy (&ctx); + } + } +nfnl_unlock (NFNL_SUBSYS_NFTABLES ); +} +static struct pernet_operations nf_tables_net_ops = { .init = nf_tables_init_net, + .exit = nf_tables_exit_net, };static int __init nf_tables_module_init (void )
Signature · 1 line
2.1.4