Commit 2d285f26 authored by Florian Westphal's avatar Florian Westphal Committed by Pablo Neira Ayuso
Browse files

netfilter: nf_tables: free flowtable hooks on hook register error



If hook registration fails, the hooks allocated via nft_netdev_hook_alloc
need to be freed.

We can't change the goto label to 'goto 5' -- while it does fix the memleak
it does cause a warning splat from the netfilter core (the hooks were not
registered).

Fixes: 3f0465a9 ("netfilter: nf_tables: dynamically allocate hooks per net_device in flowtables")
Reported-by: default avatar <syzbot+a2ff6fa45162a5ed4dd3@syzkaller.appspotmail.com>
Signed-off-by: default avatarFlorian Westphal <fw@strlen.de>
Signed-off-by: default avatarPablo Neira Ayuso <pablo@netfilter.org>
parent ee84f19c
Loading
Loading
Loading
Loading
+6 −1
Original line number Diff line number Diff line
@@ -6300,8 +6300,13 @@ static int nf_tables_newflowtable(struct net *net, struct sock *nlsk,
		goto err4;

	err = nft_register_flowtable_net_hooks(ctx.net, table, flowtable);
	if (err < 0)
	if (err < 0) {
		list_for_each_entry_safe(hook, next, &flowtable->hook_list, list) {
			list_del_rcu(&hook->list);
			kfree_rcu(hook, rcu);
		}
		goto err4;
	}

	err = nft_trans_flowtable_add(&ctx, NFT_MSG_NEWFLOWTABLE, flowtable);
	if (err < 0)