netfilter: nf_tables: unbind non-anonymous set if rule construction fails
authorPablo Neira Ayuso <pablo@netfilter.org>
Sun, 25 Jun 2023 22:42:18 +0000 (00:42 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 19 Jul 2023 14:22:16 +0000 (16:22 +0200)
commit 3e70489721b6c870252c9082c496703677240f53 upstream.

Otherwise a dangling reference to a rule object that is gone remains
in the set binding list.

Fixes: 26b5a5712eb8 ("netfilter: nf_tables: add NFT_TRANS_PREPARE_ERROR to deal with bound set/chain")
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
net/netfilter/nf_tables_api.c

index 7f71bdb..5e534c9 100644 (file)
@@ -5139,6 +5139,8 @@ void nf_tables_deactivate_set(const struct nft_ctx *ctx, struct nft_set *set,
                nft_set_trans_unbind(ctx, set);
                if (nft_set_is_anonymous(set))
                        nft_deactivate_next(ctx->net, set);
+               else
+                       list_del_rcu(&binding->list);
 
                set->use--;
                break;