netfilter: nf_tables: consolidate error path of nf_tables_newtable()

Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
This commit is contained in:
Pablo Neira Ayuso 2015-03-17 19:53:23 +01:00
Родитель 1ca9e41770
Коммит ffdb210eb4
1 изменённых файлов: 11 добавлений и 9 удалений

Просмотреть файл

@ -687,11 +687,10 @@ static int nf_tables_newtable(struct sock *nlsk, struct sk_buff *skb,
if (!try_module_get(afi->owner)) if (!try_module_get(afi->owner))
return -EAFNOSUPPORT; return -EAFNOSUPPORT;
err = -ENOMEM;
table = kzalloc(sizeof(*table), GFP_KERNEL); table = kzalloc(sizeof(*table), GFP_KERNEL);
if (table == NULL) { if (table == NULL)
module_put(afi->owner); goto err1;
return -ENOMEM;
}
nla_strlcpy(table->name, name, NFT_TABLE_MAXNAMELEN); nla_strlcpy(table->name, name, NFT_TABLE_MAXNAMELEN);
INIT_LIST_HEAD(&table->chains); INIT_LIST_HEAD(&table->chains);
@ -700,13 +699,16 @@ static int nf_tables_newtable(struct sock *nlsk, struct sk_buff *skb,
nft_ctx_init(&ctx, skb, nlh, afi, table, NULL, nla); nft_ctx_init(&ctx, skb, nlh, afi, table, NULL, nla);
err = nft_trans_table_add(&ctx, NFT_MSG_NEWTABLE); err = nft_trans_table_add(&ctx, NFT_MSG_NEWTABLE);
if (err < 0) { if (err < 0)
kfree(table); goto err2;
module_put(afi->owner);
return err;
}
list_add_tail_rcu(&table->list, &afi->tables); list_add_tail_rcu(&table->list, &afi->tables);
return 0; return 0;
err2:
kfree(table);
err1:
module_put(afi->owner);
return err;
} }
static int nft_flush_table(struct nft_ctx *ctx) static int nft_flush_table(struct nft_ctx *ctx)