Re: [PATCH nf] netfilter: ipset: let destroy callbacks adjust ext mem size

Jozsef Kadlecsik <[email protected]>
Newsgroups gmane.comp.security.firewalls.netfilter.devel
Message-ID <[email protected]>
Hi Florian,

On Tue, 4 Aug 2026, Florian Westphal wrote:

> For bitmap this change makes no difference, because destructors are
> called synchronously.
> 
> sashiko pointed out list type destruction is partially done via call_rcu:
> mem accounting could be subtracting after list_set_flush() did reset the
> value to 0.  set->elements assignment can be removed for the same reason,
> this already walks the entire set and does 'set->elements--' for each
> entry synchronously.

Yes, I agree, about set->elements too. And one DEBUG_NET_WARN_ON_ONCE() is 
enough and it should catch any problem in list_set_del() about element 
number or extension size.
 
> Fixes: 9e41f26a505c ("netfilter: ipset: Count non-static extension memory for userspace")
> Signed-off-by: Florian Westphal <[email protected]>
> ---
>  Won't apply, this assumes the pending nf PR is applied.
>  In case that PR is rejected, this patch could be
>  reworked to logically come before the atomic64 conversion,
>  but it doesn't buy mutch.
> 
>  net/netfilter/ipset/ip_set_bitmap_gen.h | 2 +-
>  net/netfilter/ipset/ip_set_list_set.c   | 3 +--
>  2 files changed, 2 insertions(+), 3 deletions(-)
> 
> diff --git a/net/netfilter/ipset/ip_set_bitmap_gen.h b/net/netfilter/ipset/ip_set_bitmap_gen.h
> index 226fdf17b683..d6a7e6604542 100644
> --- a/net/netfilter/ipset/ip_set_bitmap_gen.h
> +++ b/net/netfilter/ipset/ip_set_bitmap_gen.h
> @@ -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 */
> diff --git a/net/netfilter/ipset/ip_set_list_set.c b/net/netfilter/ipset/ip_set_list_set.c
> index ca3ef9479e83..024de3bc9fc3 100644
> --- a/net/netfilter/ipset/ip_set_list_set.c
> +++ b/net/netfilter/ipset/ip_set_list_set.c
> @@ -420,8 +420,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
> -- 

Acked-by: Jozsef Kadlecsik <[email protected]>

Best regards,
Jozsef
-- 
E-mail : [email protected], [email protected], [email protected]
Address: Wigner Research Centre for Physics
         H-1525 Budapest 114, POB. 49, Hungary
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.