]> git.itanic.dy.fi Git - linux-stable/commit
netfilter: nf_tables: defer gc run if previous batch is still pending
authorFlorian Westphal <fw@strlen.de>
Tue, 22 Aug 2023 20:03:57 +0000 (22:03 +0200)
committerFlorian Westphal <fw@strlen.de>
Wed, 23 Aug 2023 14:12:59 +0000 (16:12 +0200)
commit8e51830e29e12670b4c10df070a4ea4c9593e961
tree5d6069b43e1d58edd447077fcfb02ee0d3fcd8fd
parent5e1be4cdc98c989d5387ce94ff15b5ad06a5b681
netfilter: nf_tables: defer gc run if previous batch is still pending

Don't queue more gc work, else we may queue the same elements multiple
times.

If an element is flagged as dead, this can mean that either the previous
gc request was invalidated/discarded by a transaction or that the previous
request is still pending in the system work queue.

The latter will happen if the gc interval is set to a very low value,
e.g. 1ms, and system work queue is backlogged.

The sets refcount is 1 if no previous gc requeusts are queued, so add
a helper for this and skip gc run if old requests are pending.

Add a helper for this and skip the gc run in this case.

Fixes: f6c383b8c31a ("netfilter: nf_tables: adapt set backend to use GC transaction API")
Signed-off-by: Florian Westphal <fw@strlen.de>
Reviewed-by: Pablo Neira Ayuso <pablo@netfilter.org>
include/net/netfilter/nf_tables.h
net/netfilter/nft_set_hash.c
net/netfilter/nft_set_rbtree.c