Skip to content

Commit 33c7aba

Browse files
committed
netfilter: nf_tables: do not set up extensions for end interval
Elements with an end interval flag set on do not store extensions. The global set definition is currently setting on the timeout and stateful expression for end interval elements. This leads to skipping end interval elements from the set->ops->walk() path as the expired check bogusly reports true. Moreover, do not set up stateful expressions for elements with end interval flag set on since this is never used. Fixes: 6503842 ("netfilter: nf_tables: allow to specify stateful expression in set definition") Fixes: 8d8540c ("netfilter: nft_set_rbtree: add timeout support") Signed-off-by: Pablo Neira Ayuso <[email protected]>
1 parent 52d1aa8 commit 33c7aba

File tree

1 file changed

+4
-2
lines changed

1 file changed

+4
-2
lines changed

net/netfilter/nf_tables_api.c

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5958,7 +5958,8 @@ static int nft_add_set_elem(struct nft_ctx *ctx, struct nft_set *set,
59585958
&timeout);
59595959
if (err)
59605960
return err;
5961-
} else if (set->flags & NFT_SET_TIMEOUT) {
5961+
} else if (set->flags & NFT_SET_TIMEOUT &&
5962+
!(flags & NFT_SET_ELEM_INTERVAL_END)) {
59625963
timeout = set->timeout;
59635964
}
59645965

@@ -6024,7 +6025,8 @@ static int nft_add_set_elem(struct nft_ctx *ctx, struct nft_set *set,
60246025
err = -EOPNOTSUPP;
60256026
goto err_set_elem_expr;
60266027
}
6027-
} else if (set->num_exprs > 0) {
6028+
} else if (set->num_exprs > 0 &&
6029+
!(flags & NFT_SET_ELEM_INTERVAL_END)) {
60286030
err = nft_set_elem_expr_clone(ctx, set, expr_array);
60296031
if (err < 0)
60306032
goto err_set_elem_expr_clone;

0 commit comments

Comments
 (0)