]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
netfilter: ipset: let destroy callbacks adjust ext mem size
authorFlorian Westphal <fw@strlen.de>
Thu, 6 Aug 2026 14:17:50 +0000 (16:17 +0200)
committerPablo Neira Ayuso <pablo@netfilter.org>
Mon, 10 Aug 2026 18:28:25 +0000 (20:28 +0200)
For bitmap this change makes no difference, because destructors are
called synchronously.

List type however calls them via call_rcu() so accounting decrement can
happen after list_set_flush() set ext_size to 0.

'set->elements = 0' can be removed for the same reason in the list type
case, it calls 'set->elements--' for each element.

Fixes: 9e41f26a505c ("netfilter: ipset: Count non-static extension memory for userspace")
Suggested-by: Jozsef Kadlecsik <kadlec@netfilter.org>
Signed-off-by: Florian Westphal <fw@strlen.de>
Acked-by: Jozsef Kadlecsik <kadlec@netfilter.org>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
net/netfilter/ipset/ip_set_bitmap_gen.h
net/netfilter/ipset/ip_set_list_set.c

index 226fdf17b683292f7e177bc0aa82508c9dbaca07..d6a7e66045422f8d91e044503637766bae2c307f 100644 (file)
@@ -77,7 +77,7 @@ mtype_flush(struct ip_set *set)
                mtype_ext_cleanup(set);
        bitmap_zero(map->members, map->elements);
        set->elements = 0;
-       atomic64_set(&set->ext_size, 0);
+       DEBUG_NET_WARN_ON_ONCE(atomic64_read(&set->ext_size) > 0);
 }
 
 /* Calculate the actual memory size of the set data */
index 0bc2370773af3c233a39849acbe19fe75660d2d4..f070088742d607aff9377b37c637a1d02c1f2be2 100644 (file)
@@ -423,8 +423,7 @@ list_set_flush(struct ip_set *set)
 
        list_for_each_entry_safe(e, n, &map->members, list)
                list_set_del(set, e);
-       set->elements = 0;
-       atomic64_set(&set->ext_size, 0);
+       DEBUG_NET_WARN_ON_ONCE(set->elements > 0);
 }
 
 static void