Skip to content

Commit 60c0c23

Browse files
committed
netfilter: nft_set_rbtree: skip end interval element from gc
rbtree lazy gc on insert might collect an end interval element that has been just added in this transactions, skip end interval elements that are not yet active. Fixes: f718863 ("netfilter: nft_set_rbtree: fix overlap expiration walk") Cc: [email protected] Reported-by: lonial con <[email protected]> Signed-off-by: Pablo Neira Ayuso <[email protected]>
1 parent f82777e commit 60c0c23

File tree

1 file changed

+3
-3
lines changed

1 file changed

+3
-3
lines changed

net/netfilter/nft_set_rbtree.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -234,7 +234,7 @@ static void nft_rbtree_gc_elem_remove(struct net *net, struct nft_set *set,
234234

235235
static const struct nft_rbtree_elem *
236236
nft_rbtree_gc_elem(const struct nft_set *__set, struct nft_rbtree *priv,
237-
struct nft_rbtree_elem *rbe, u8 genmask)
237+
struct nft_rbtree_elem *rbe)
238238
{
239239
struct nft_set *set = (struct nft_set *)__set;
240240
struct rb_node *prev = rb_prev(&rbe->node);
@@ -253,7 +253,7 @@ nft_rbtree_gc_elem(const struct nft_set *__set, struct nft_rbtree *priv,
253253
while (prev) {
254254
rbe_prev = rb_entry(prev, struct nft_rbtree_elem, node);
255255
if (nft_rbtree_interval_end(rbe_prev) &&
256-
nft_set_elem_active(&rbe_prev->ext, genmask))
256+
nft_set_elem_active(&rbe_prev->ext, NFT_GENMASK_ANY))
257257
break;
258258

259259
prev = rb_prev(prev);
@@ -365,7 +365,7 @@ static int __nft_rbtree_insert(const struct net *net, const struct nft_set *set,
365365
nft_set_elem_active(&rbe->ext, cur_genmask)) {
366366
const struct nft_rbtree_elem *removed_end;
367367

368-
removed_end = nft_rbtree_gc_elem(set, priv, rbe, genmask);
368+
removed_end = nft_rbtree_gc_elem(set, priv, rbe);
369369
if (IS_ERR(removed_end))
370370
return PTR_ERR(removed_end);
371371

0 commit comments

Comments
 (0)