netfilter: nft_set_hash: GC reaps elements with conncount for dynamic sets only
authorPablo Neira Ayuso <pablo@netfilter.org>
Fri, 21 Mar 2025 22:24:20 +0000 (23:24 +0100)
committerPablo Neira Ayuso <pablo@netfilter.org>
Wed, 2 Apr 2025 20:50:56 +0000 (22:50 +0200)
conncount has its own GC handler which determines when to reap stale
elements, this is convenient for dynamic sets. However, this also reaps
non-dynamic sets with static configurations coming from control plane.
Always run connlimit gc handler but honor feedback to reap element if
this set is dynamic.

Fixes: 290180e2448c ("netfilter: nf_tables: add connlimit support")
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
net/netfilter/nft_set_hash.c

index 8bfac4185ac797fa69a0e5c92e690d92db4c097a..abb0c8ec6371917e1829a44eadcd200579d8ddbc 100644 (file)
@@ -309,7 +309,8 @@ static bool nft_rhash_expr_needs_gc_run(const struct nft_set *set,
 
        nft_setelem_expr_foreach(expr, elem_expr, size) {
                if (expr->ops->gc &&
-                   expr->ops->gc(read_pnet(&set->net), expr))
+                   expr->ops->gc(read_pnet(&set->net), expr) &&
+                   set->flags & NFT_SET_EVAL)
                        return true;
        }