Skip to content

Commit 6cb02fd

Browse files
committed
netfilter: nft_set_rbtree: skip end interval element from gc
jira LE-1907 cve CVE-2024-26581 Rebuild_History Non-Buildable kernel-5.14.0-427.33.1.el9_4 commit-author Pablo Neira Ayuso <[email protected]> commit 60c0c23 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]> (cherry picked from commit 60c0c23) Signed-off-by: Jonathan Maple <[email protected]>
1 parent 1a5854e commit 6cb02fd

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
@@ -238,7 +238,7 @@ static void nft_rbtree_gc_elem_remove(struct net *net, struct nft_set *set,
238238

239239
static const struct nft_rbtree_elem *
240240
nft_rbtree_gc_elem(const struct nft_set *__set, struct nft_rbtree *priv,
241-
struct nft_rbtree_elem *rbe, u8 genmask)
241+
struct nft_rbtree_elem *rbe)
242242
{
243243
struct nft_set *set = (struct nft_set *)__set;
244244
struct rb_node *prev = rb_prev(&rbe->node);
@@ -257,7 +257,7 @@ nft_rbtree_gc_elem(const struct nft_set *__set, struct nft_rbtree *priv,
257257
while (prev) {
258258
rbe_prev = rb_entry(prev, struct nft_rbtree_elem, node);
259259
if (nft_rbtree_interval_end(rbe_prev) &&
260-
nft_set_elem_active(&rbe_prev->ext, genmask))
260+
nft_set_elem_active(&rbe_prev->ext, NFT_GENMASK_ANY))
261261
break;
262262

263263
prev = rb_prev(prev);
@@ -369,7 +369,7 @@ static int __nft_rbtree_insert(const struct net *net, const struct nft_set *set,
369369
nft_set_elem_active(&rbe->ext, cur_genmask)) {
370370
const struct nft_rbtree_elem *removed_end;
371371

372-
removed_end = nft_rbtree_gc_elem(set, priv, rbe, genmask);
372+
removed_end = nft_rbtree_gc_elem(set, priv, rbe);
373373
if (IS_ERR(removed_end))
374374
return PTR_ERR(removed_end);
375375

0 commit comments

Comments
 (0)