From 0d17d28bb06bf2a04862d5cd879a14bcb9a2d2dc Mon Sep 17 00:00:00 2001 From: Pablo Neira Ayuso Date: Tue, 1 Apr 2025 18:11:45 +0200 Subject: optimize: expand expression list when merging into concatenation The following rules: udp dport 137 ct state new,untracked accept udp dport 138 ct state new,untracked accept results in: nft: src/optimize.c:670: __merge_concat: Assertion `0' failed. The logic to expand to the new,untracked list in the concatenation is missing. Fixes: 187c6d01d357 ("optimize: expand implicit set element when merging into concatenation") Signed-off-by: Pablo Neira Ayuso --- src/optimize.c | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'src') diff --git a/src/optimize.c b/src/optimize.c index 44010f2b..139bc2d7 100644 --- a/src/optimize.c +++ b/src/optimize.c @@ -666,6 +666,16 @@ static void __merge_concat(const struct optimize_ctx *ctx, uint32_t i, clone = expr_clone(stmt_a->expr->right); compound_expr_add(concat, clone); break; + case EXPR_LIST: + list_for_each_entry(expr, &stmt_a->expr->right->expressions, list) { + concat_clone = expr_clone(concat); + clone = expr_clone(expr); + compound_expr_add(concat_clone, clone); + list_add_tail(&concat_clone->list, &pending_list); + } + list_del(&concat->list); + expr_free(concat); + break; default: assert(0); break; -- cgit v1.2.3