diff options
author | Pablo Neira Ayuso <pablo@netfilter.org> | 2022-04-13 15:37:19 +0200 |
---|---|---|
committer | Pablo Neira Ayuso <pablo@netfilter.org> | 2022-04-13 16:31:41 +0200 |
commit | ab1b21be54b2be4130f10dda7127aeca3195e252 (patch) | |
tree | 682aaa06e7476df4faf73aea82a1f86bea69ac3a /src/intervals.c | |
parent | e0beff27435433ce2fd2826496774a539df73d65 (diff) |
intervals: unset EXPR_F_KERNEL for adjusted elements
This element is adjusted, reset the EXPR_F_KERNEL flag, this is a new
element and the old is purged from the kernel.
The existing list of elements in the kernel is spliced to the elements
to be removed, then merge-sorted. The EXPR_F_REMOVE flag specifies that
this element represents a deletion.
The EXPR_F_REMOVE and EXPR_F_KERNEL allows to track objects: whether
element is in the kernel (EXPR_F_KERNEL), element is new (no flag) or
element represents a removal (EXPR_F_REMOVE).
Reported-by: Phil Sutter <phil@nwl.cc>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
Diffstat (limited to 'src/intervals.c')
-rw-r--r-- | src/intervals.c | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/src/intervals.c b/src/intervals.c index 451bc4dd..cdda9e38 100644 --- a/src/intervals.c +++ b/src/intervals.c @@ -279,7 +279,7 @@ static void remove_elem(struct expr *prev, struct set *set, struct expr *purge) static void __adjust_elem_left(struct set *set, struct expr *prev, struct expr *i, struct expr *add) { - prev->flags &= EXPR_F_KERNEL; + prev->flags &= ~EXPR_F_KERNEL; expr_free(prev->key->left); prev->key->left = expr_get(i->key->right); mpz_add_ui(prev->key->left->value, prev->key->left->value, 1); @@ -304,7 +304,7 @@ static void adjust_elem_left(struct set *set, struct expr *prev, struct expr *i, static void __adjust_elem_right(struct set *set, struct expr *prev, struct expr *i, struct expr *add) { - prev->flags &= EXPR_F_KERNEL; + prev->flags &= ~EXPR_F_KERNEL; expr_free(prev->key->right); prev->key->right = expr_get(i->key->left); mpz_sub_ui(prev->key->right->value, prev->key->right->value, 1); @@ -334,7 +334,7 @@ static void split_range(struct set *set, struct expr *prev, struct expr *i, clone = expr_clone(prev); list_move_tail(&clone->list, &purge->expressions); - prev->flags &= EXPR_F_KERNEL; + prev->flags &= ~EXPR_F_KERNEL; clone = expr_clone(prev); expr_free(clone->key->left); clone->key->left = expr_get(i->key->right); |