netfilter: nf_tables: revert do not remove elements if set backend implements .abort
authorPablo Neira Ayuso <pablo@netfilter.org>
Wed, 18 Oct 2023 11:18:39 +0000 (13:18 +0200)
committerFlorian Westphal <fw@strlen.de>
Wed, 18 Oct 2023 11:47:32 +0000 (13:47 +0200)
nf_tables_abort_release() path calls nft_set_elem_destroy() for
NFT_MSG_NEWSETELEM which releases the element, however, a reference to
the element still remains in the working copy.

Fixes: ebd032fa8818 ("netfilter: nf_tables: do not remove elements if set backend implements .abort")
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
Signed-off-by: Florian Westphal <fw@strlen.de>
net/netfilter/nf_tables_api.c

index 7b77ff5985f68f11feeee913bd31121b5d1f4dfb..29c651804cb221ca9005f925bfb1f44d622c4859 100644 (file)
@@ -10345,10 +10345,7 @@ static int __nf_tables_abort(struct net *net, enum nfnl_abort_action action)
                                break;
                        }
                        te = (struct nft_trans_elem *)trans->data;
-                       if (!te->set->ops->abort ||
-                           nft_setelem_is_catchall(te->set, &te->elem))
-                               nft_setelem_remove(net, te->set, &te->elem);
-
+                       nft_setelem_remove(net, te->set, &te->elem);
                        if (!nft_setelem_is_catchall(te->set, &te->elem))
                                atomic_dec(&te->set->nelems);