netfilter: nf_tables: complete net namespace support
Register family per netnamespace to ensure that sets are only visible in its approapriate namespace. Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
This commit is contained in:
@@ -19,14 +19,42 @@ static struct nft_af_info nft_af_bridge __read_mostly = {
|
||||
.owner = THIS_MODULE,
|
||||
};
|
||||
|
||||
static int nf_tables_bridge_init_net(struct net *net)
|
||||
{
|
||||
net->nft.bridge = kmalloc(sizeof(struct nft_af_info), GFP_KERNEL);
|
||||
if (net->nft.bridge == NULL)
|
||||
return -ENOMEM;
|
||||
|
||||
memcpy(net->nft.bridge, &nft_af_bridge, sizeof(nft_af_bridge));
|
||||
|
||||
if (nft_register_afinfo(net, net->nft.bridge) < 0)
|
||||
goto err;
|
||||
|
||||
return 0;
|
||||
err:
|
||||
kfree(net->nft.bridge);
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
static void nf_tables_bridge_exit_net(struct net *net)
|
||||
{
|
||||
nft_unregister_afinfo(net->nft.bridge);
|
||||
kfree(net->nft.bridge);
|
||||
}
|
||||
|
||||
static struct pernet_operations nf_tables_bridge_net_ops = {
|
||||
.init = nf_tables_bridge_init_net,
|
||||
.exit = nf_tables_bridge_exit_net,
|
||||
};
|
||||
|
||||
static int __init nf_tables_bridge_init(void)
|
||||
{
|
||||
return nft_register_afinfo(&nft_af_bridge);
|
||||
return register_pernet_subsys(&nf_tables_bridge_net_ops);
|
||||
}
|
||||
|
||||
static void __exit nf_tables_bridge_exit(void)
|
||||
{
|
||||
nft_unregister_afinfo(&nft_af_bridge);
|
||||
return unregister_pernet_subsys(&nf_tables_bridge_net_ops);
|
||||
}
|
||||
|
||||
module_init(nf_tables_bridge_init);
|
||||
|
Reference in New Issue
Block a user