summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorPablo Neira Ayuso <pablo@netfilter.org>2022-04-13 15:37:19 +0200
committerPablo Neira Ayuso <pablo@netfilter.org>2022-04-13 16:31:41 +0200
commitab1b21be54b2be4130f10dda7127aeca3195e252 (patch)
tree682aaa06e7476df4faf73aea82a1f86bea69ac3a /src
parente0beff27435433ce2fd2826496774a539df73d65 (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')
-rw-r--r--src/intervals.c6
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);