History

netfilter: nf_tables: get rid of NFT_BASECHAIN_DISABLED

This flag was introduced to restore rulesets from the new netdev family, but since 5ebe0b0eec9d6f7 ("netfilter: nf_tables: destroy basechain and rules on netdevice removal") the ruleset is released once the netdev is gone. This also removes nft_register_basechain() and nft_unregister_basechain() since they have no clients anymore after this rework.

Pablo Neira Ayuso committed 10 years ago

Commit 82bec711 parent 3183ab82 files · +25 −38Browse files

Unified · Split

2 files
  1. include/net/netfilter/nf_tables.h +0 −1
  2. net/netfilter/nf_tables_api.c +25 −37
include/net/netfilter/nf_tables.h+0−1
@@ -798,7 +798,6 @@ struct nft_stats { · 797 unmodified lines
798798 };
799799
800800 #define NFT_HOOK_OPS_MAX 2
801−#define NFT_BASECHAIN_DISABLED (1 << 0)
802801
803802 /**
804803 * struct nft_base_chain - nf_tables base chain
net/netfilter/nf_tables_api.c+25−37
@@ -131,29 +131,8 @@ static void nft_trans_destroy(struct nft_trans *trans) · 130 unmodified lines
131131 kfree(trans);
132132 }
133133
134−static int nft_register_basechain(struct nft_base_chain *basechain,
135− unsigned int hook_nops)
136−{
137− struct net *net = read_pnet(&basechain->pnet);
138−
139− if (basechain->flags & NFT_BASECHAIN_DISABLED)
140− return 0;
141−
142− return nf_register_net_hooks(net, basechain->ops, hook_nops);
143−}
144−
145−static void nft_unregister_basechain(struct nft_base_chain *basechain,
146− unsigned int hook_nops)
147−{
148− struct net *net = read_pnet(&basechain->pnet);
149−
150− if (basechain->flags & NFT_BASECHAIN_DISABLED)
151− return;
152−
153− nf_unregister_net_hooks(net, basechain->ops, hook_nops);
154−}
155−
156−static int nf_tables_register_hooks(const struct nft_table *table,
134+static int nf_tables_register_hooks(struct net *net,
135+ const struct nft_table *table,
157136 struct nft_chain *chain,
158137 unsigned int hook_nops)
159138 {
@@ -161,10 +140,12 @@ static int nf_tables_register_hooks(const struct nft_table *table, · 1 unmodified line
161140 !(chain->flags & NFT_BASE_CHAIN))
162141 return 0;
163142
164− return nft_register_basechain(nft_base_chain(chain), hook_nops);
143+ return nf_register_net_hooks(net, nft_base_chain(chain)->ops,
144+ hook_nops);
165145 }
166146
167−static void nf_tables_unregister_hooks(const struct nft_table *table,
147+static void nf_tables_unregister_hooks(struct net *net,
148+ const struct nft_table *table,
168149 struct nft_chain *chain,
169150 unsigned int hook_nops)
170151 {
@@ -172,7 +153,7 @@ static void nf_tables_unregister_hooks(const struct nft_table *table, · 1 unmodified line
172153 !(chain->flags & NFT_BASE_CHAIN))
173154 return;
174155
175− nft_unregister_basechain(nft_base_chain(chain), hook_nops);
156+ nf_unregister_net_hooks(net, nft_base_chain(chain)->ops, hook_nops);
176157 }
177158
178159 static int nft_trans_table_add(struct nft_ctx *ctx, int msg_type)
@@ -569,7 +550,8 @@ static int nf_tables_table_enable(struct net *net, · 390 unmodified lines
569550 if (!(chain->flags & NFT_BASE_CHAIN))
570551 continue;
571552
572− err = nft_register_basechain(nft_base_chain(chain), afi->nops);
553+ err = nf_register_net_hooks(net, nft_base_chain(chain)->ops,
554+ afi->nops);
573555 if (err < 0)
574556 goto err;
575557
@@ -586,7 +568,8 @@ err: · 10 unmodified lines
586568 if (i-- <= 0)
587569 break;
588570
589− nft_unregister_basechain(nft_base_chain(chain), afi->nops);
571+ nf_unregister_net_hooks(net, nft_base_chain(chain)->ops,
572+ afi->nops);
590573 }
591574 return err;
592575 }
@@ -600,9 +583,11 @@ static void nf_tables_table_disable(struct net *net, · 7 unmodified lines
600583 list_for_each_entry(chain, &table->chains, list) {
601584 if (!nft_is_active_next(net, chain))
602585 continue;
603− if (chain->flags & NFT_BASE_CHAIN)
604− nft_unregister_basechain(nft_base_chain(chain),
605− afi->nops);
586+ if (!(chain->flags & NFT_BASE_CHAIN))
587+ continue;
588+
589+ nf_unregister_net_hooks(net, nft_base_chain(chain)->ops,
590+ afi->nops);
606591 }
607592 }
608593
@@ -1451,7 +1436,7 @@ static int nf_tables_newchain(struct net *net, struct sock *nlsk, · 842 unmodified lines
14511436 chain->table = table;
14521437 nla_strlcpy(chain->name, name, NFT_CHAIN_MAXNAMELEN);
14531438
1454− err = nf_tables_register_hooks(table, chain, afi->nops);
1439+ err = nf_tables_register_hooks(net, table, chain, afi->nops);
14551440 if (err < 0)
14561441 goto err1;
14571442
@@ -1464,7 +1449,7 @@ static int nf_tables_newchain(struct net *net, struct sock *nlsk, · 6 unmodified lines
14641449 list_add_tail_rcu(&chain->list, &table->chains);
14651450 return 0;
14661451 err2:
1467− nf_tables_unregister_hooks(table, chain, afi->nops);
1452+ nf_tables_unregister_hooks(net, table, chain, afi->nops);
14681453 err1:
14691454 nf_tables_chain_destroy(chain);
14701455 return err;
@@ -3995,7 +3980,8 @@ static int nf_tables_commit(struct net *net, struct sk_buff *skb) · 2524 unmodified lines
39953980 case NFT_MSG_DELCHAIN:
39963981 list_del_rcu(&trans->ctx.chain->list);
39973982 nf_tables_chain_notify(&trans->ctx, NFT_MSG_DELCHAIN);
3998− nf_tables_unregister_hooks(trans->ctx.table,
3983+ nf_tables_unregister_hooks(trans->ctx.net,
3984+ trans->ctx.table,
39993985 trans->ctx.chain,
40003986 trans->ctx.afi->nops);
40013987 break;
@@ -4120,7 +4106,8 @@ static int nf_tables_abort(struct net *net, struct sk_buff *skb) · 118 unmodified lines
41204106 } else {
41214107 trans->ctx.table->use--;
41224108 list_del_rcu(&trans->ctx.chain->list);
4123− nf_tables_unregister_hooks(trans->ctx.table,
4109+ nf_tables_unregister_hooks(trans->ctx.net,
4110+ trans->ctx.table,
41244111 trans->ctx.chain,
41254112 trans->ctx.afi->nops);
41264113 }
@@ -4662,7 +4649,7 @@ int __nft_release_basechain(struct nft_ctx *ctx) · 535 unmodified lines
46624649
46634650 BUG_ON(!(ctx->chain->flags & NFT_BASE_CHAIN));
46644651
4665− nf_tables_unregister_hooks(ctx->chain->table, ctx->chain,
4652+ nf_tables_unregister_hooks(ctx->net, ctx->chain->table, ctx->chain,
46664653 ctx->afi->nops);
46674654 list_for_each_entry_safe(rule, nr, &ctx->chain->rules, list) {
46684655 list_del(&rule->list);
@@ -4691,7 +4678,8 @@ static void __nft_release_afinfo(struct net *net, struct nft_af_info *afi) · 22 unmodified lines
46914678
46924679 list_for_each_entry_safe(table, nt, &afi->tables, list) {
46934680 list_for_each_entry(chain, &table->chains, list)
4694− nf_tables_unregister_hooks(table, chain, afi->nops);
4681+ nf_tables_unregister_hooks(net, table, chain,
4682+ afi->nops);
46954683 /* No packets are walking on these chains anymore. */
46964684 ctx.table = table;
46974685 list_for_each_entry(chain, &table->chains, list) {

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t