summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorPablo Neira Ayuso <pablo@netfilter.org>2019-10-09 11:54:32 +0200
committerPablo Neira Ayuso <pablo@netfilter.org>2019-10-09 12:32:06 +0200
commita4ec053812610400b7a9e6c060d8b7589dedd5b1 (patch)
treebad46699b31fc8bdcbb52ba6d087863c6eabf7f5 /src
parent998142c71d095d79488495ea545a704213fa0ba0 (diff)
segtree: always close interval in non-anonymous sets
Skip this optimization for non-anonymous sets, otherwise, element deletion breaks. Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
Diffstat (limited to 'src')
-rw-r--r--src/segtree.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/src/segtree.c b/src/segtree.c
index eff0653a..5d6ecd4f 100644
--- a/src/segtree.c
+++ b/src/segtree.c
@@ -496,7 +496,8 @@ static void segtree_linearize(struct list_head *list, const struct set *set,
* (prev_right, ei_left).
*/
mpz_add_ui(p, prev->right, 1);
- if (mpz_cmp(p, ei->left) < 0) {
+ if (mpz_cmp(p, ei->left) < 0 ||
+ !(set->flags & NFT_SET_ANONYMOUS)) {
mpz_sub_ui(q, ei->left, 1);
nei = ei_alloc(p, q, NULL, EI_F_INTERVAL_END);
list_add_tail(&nei->list, list);