]> git.ipfire.org Git - thirdparty/nftables.git/commitdiff
intervals: set on EXPR_F_KERNEL flag for new elements in set cache
authorPablo Neira Ayuso <pablo@netfilter.org>
Mon, 18 Apr 2022 13:17:59 +0000 (15:17 +0200)
committerPablo Neira Ayuso <pablo@netfilter.org>
Mon, 18 Apr 2022 15:25:13 +0000 (17:25 +0200)
So follow up command in this batch that update the set assumes this
element is already in the kernel.

Fixes: 3da9643fb9ff ("intervals: add support to automerge with kernel elements")
Fixes: 3ed9fadaab95 ("intervals: build list of elements to be added from cache")
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
src/intervals.c

index 584c69d5189b9936d55419d0c802e5c659f2698b..a74238525d8db4062b4d8db98bc669f55393819d 100644 (file)
@@ -244,6 +244,7 @@ int set_automerge(struct list_head *msgs, struct cmd *cmd, struct set *set,
                                             i->key->left->value, i->key->right->value);
                        }
                        clone = expr_clone(i);
+                       clone->flags |= EXPR_F_KERNEL;
                        list_add_tail(&clone->list, &existing_set->init->expressions);
                }
        }
@@ -481,6 +482,7 @@ int set_delete(struct list_head *msgs, struct cmd *cmd, struct set *set,
                if (!(i->flags & EXPR_F_KERNEL)) {
                        clone = expr_clone(i);
                        list_add_tail(&clone->list, &add->expressions);
+                       i->flags |= EXPR_F_KERNEL;
                }
        }
 
@@ -609,6 +611,7 @@ int set_overlap(struct list_head *msgs, struct set *set, struct expr *init)
                        list_move_tail(&i->list, &existing_set->init->expressions);
                else if (existing_set) {
                        clone = expr_clone(i);
+                       clone->flags |= EXPR_F_KERNEL;
                        list_add_tail(&clone->list, &existing_set->init->expressions);
                }
        }