path: root/files/examples
diff options
authorStefano Brivio <>2020-05-27 22:51:21 +0200
committerPablo Neira Ayuso <>2020-05-28 02:07:30 +0200
commit7aa08d45031ec7ce5dadb4979471d626367c09cd (patch)
tree233428ae8366edfea9e78976a345cfbdce388b9f /files/examples
parent8615ed93f6e4c4b105525f033b927b510469b987 (diff)
evaluate: Perform set evaluation on implicitly declared (anonymous) sets
If a set is implicitly declared, set_evaluate() is not called as a result of cmd_evaluate_add(), because we're adding in fact something else (e.g. a rule). Expression-wise, evaluation still happens as the implicit set expression is eventually found in the tree and handled by expr_evaluate_set(), but context-wise evaluation (set_evaluate()) is skipped, and this might be relevant instead. This is visible in the reported case of an anonymous set including concatenated ranges: # nft add rule t c ip saddr . tcp dport { . 20-30 } accept BUG: invalid range expression type concat nft: expression.c:1160: range_expr_value_low: Assertion `0' failed. Aborted because we reach do_add_set() without properly evaluated flags and set description, and eventually end up in expr_to_intervals(), which can't handle that expression. Explicitly call set_evaluate() as we add anonymous sets into the context, and instruct the same function to: - skip expression-wise set evaluation if the set is anonymous, as that happens later anyway as part of the general tree evaluation - skip the insertion in the set cache, as it makes no sense to have sets that shouldn't be referenced there For object maps, the allocation of the expression for set->data is already handled by set_evaluate(), so we can now drop that from stmt_evaluate_objref_map(). v2: - skip insertion of set in cache (Pablo Neira Ayuso) - drop double allocation of expression (and leak of the first one) for object maps (Pablo Neira Ayuso) Reported-by: Pablo Neira Ayuso <> Reported-by: Phil Sutter <> Signed-off-by: Stefano Brivio <> Signed-off-by: Pablo Neira Ayuso <>
Diffstat (limited to 'files/examples')
0 files changed, 0 insertions, 0 deletions