]> git.ipfire.org Git - thirdparty/nftables.git/commitdiff
intervals: do not merge intervals with different timeout
authorPablo Neira Ayuso <pablo@netfilter.org>
Fri, 3 Jan 2025 16:40:52 +0000 (17:40 +0100)
committerPablo Neira Ayuso <pablo@netfilter.org>
Fri, 10 Jan 2025 10:21:02 +0000 (11:21 +0100)
If timeout/expiration of contiguous intervals is different, then do not
merge them.

Fixes: 81e36530fcac ("src: replace interval segment tree overlap and automerge")
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
src/intervals.c

index 44fdda36e35fbcc2cebabfa6a188a04b2011c2c1..ffd474fd595e0926608c5bdc631a0f9fee162dbe 100644 (file)
@@ -156,6 +156,8 @@ static void set_prev_elem(struct expr **prev, struct expr *i,
        mpz_set(prev_range->high, range->high);
 }
 
+static struct expr *interval_expr_key(struct expr *i);
+
 static void setelem_automerge(struct set_automerge_ctx *ctx)
 {
        struct expr *i, *next, *prev = NULL;
@@ -175,7 +177,9 @@ static void setelem_automerge(struct set_automerge_ctx *ctx)
                range_expr_value_low(range.low, i);
                range_expr_value_high(range.high, i);
 
-               if (!prev) {
+               if (!prev ||
+                   interval_expr_key(prev)->timeout != interval_expr_key(i)->timeout ||
+                   interval_expr_key(prev)->expiration != interval_expr_key(i)->expiration) {
                        set_prev_elem(&prev, i, &prev_range, &range);
                        continue;
                }