552075b562
* Thu Feb 09 2023 Phil Sutter <psutter@redhat.com> [1.0.4-8.el9] - monitor: Sanitize startup race condition (Phil Sutter) [2130721] - evaluate: set eval ctx for add/update statements with integer constants (Phil Sutter) [2094894] - src: allow anon set concatenation with ether and vlan (Phil Sutter) [2094887] - evaluate: search stacked header list for matching payload dep (Phil Sutter) [2094887] - netlink_delinearize: also postprocess OP_AND in set element context (Phil Sutter) [2094887] - tests: add a test case for ether and vlan listing (Phil Sutter) [2094887] - debug: dump the l2 protocol stack (Phil Sutter) [2094887] - proto: track full stack of seen l2 protocols, not just cumulative offset (Phil Sutter) [2094887] - netlink_delinearize: postprocess binary ands in concatenations (Phil Sutter) [2094887] - netlink_delinearize: allow postprocessing on concatenated elements (Phil Sutter) [2094887] - intervals: check for EXPR_F_REMOVE in case of element mismatch (Phil Sutter) [2115627] - intervals: fix crash when trying to remove element in empty set (Phil Sutter) [2115627] - scanner: don't pop active flex scanner scope (Phil Sutter) [2113874] - parser: add missing synproxy scope closure (Phil Sutter) [2113874] - tests/py: Add a test for failing ipsec after counter (Phil Sutter) [2113874] - doc: Document limitations of ipsec expression with xfrm_interface (Phil Sutter) [1806431] Resolves: rhbz#1806431, rhbz#2094887, rhbz#2094894, rhbz#2113874, rhbz#2115627, rhbz#2130721, rhbz#2094890
77 lines
2.5 KiB
Diff
77 lines
2.5 KiB
Diff
From cff78b77d409445b0490e67bf9329e69e0bbc872 Mon Sep 17 00:00:00 2001
|
|
From: Phil Sutter <psutter@redhat.com>
|
|
Date: Thu, 9 Feb 2023 10:27:57 +0100
|
|
Subject: [PATCH] netlink_delinearize: allow postprocessing on concatenated
|
|
elements
|
|
|
|
Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=2094887
|
|
Upstream Status: nftables commit 0542a431e8dcc
|
|
|
|
commit 0542a431e8dccfa86fa5b1744f536e61a0b204f3
|
|
Author: Florian Westphal <fw@strlen.de>
|
|
Date: Tue Jun 14 21:57:58 2022 +0200
|
|
|
|
netlink_delinearize: allow postprocessing on concatenated elements
|
|
|
|
Currently there is no case where the individual expressions inside a
|
|
mapped concatenation need to be munged.
|
|
|
|
However, to support proper delinearization for an input like
|
|
'rule netdev nt nc set update ether saddr . vlan id timeout 5s @macset'
|
|
|
|
we need to allow this.
|
|
|
|
Right now, this gets listed as:
|
|
|
|
update @macset { @ll,48,48 . @ll,112,16 & 0xfff timeout 5s }
|
|
|
|
because the ethernet protocol is replaced by vlan beforehand,
|
|
so we fail to map @ll,48,48 to a vlan protocol.
|
|
|
|
Likewise, we can't map the vlan info either because we cannot
|
|
cope with the 'and' operation properly, nor is it removed.
|
|
|
|
Prepare for this by deleting and re-adding so that we do not
|
|
corrupt the linked list.
|
|
|
|
After this, the list can be safely changed and a followup patch
|
|
can start to delete/reallocate expressions.
|
|
|
|
Signed-off-by: Florian Westphal <fw@strlen.de>
|
|
|
|
Signed-off-by: Phil Sutter <psutter@redhat.com>
|
|
---
|
|
src/netlink_delinearize.c | 7 ++++++-
|
|
1 file changed, 6 insertions(+), 1 deletion(-)
|
|
|
|
diff --git a/src/netlink_delinearize.c b/src/netlink_delinearize.c
|
|
index 068c3bb..2f13990 100644
|
|
--- a/src/netlink_delinearize.c
|
|
+++ b/src/netlink_delinearize.c
|
|
@@ -2538,16 +2538,21 @@ static void expr_postprocess(struct rule_pp_ctx *ctx, struct expr **exprp)
|
|
unsigned int type = expr->dtype->type, ntype = 0;
|
|
int off = expr->dtype->subtypes;
|
|
const struct datatype *dtype;
|
|
+ LIST_HEAD(tmp);
|
|
+ struct expr *n;
|
|
|
|
- list_for_each_entry(i, &expr->expressions, list) {
|
|
+ list_for_each_entry_safe(i, n, &expr->expressions, list) {
|
|
if (type) {
|
|
dtype = concat_subtype_lookup(type, --off);
|
|
expr_set_type(i, dtype, dtype->byteorder);
|
|
}
|
|
+ list_del(&i->list);
|
|
expr_postprocess(ctx, &i);
|
|
+ list_add_tail(&i->list, &tmp);
|
|
|
|
ntype = concat_subtype_add(ntype, i->dtype->type);
|
|
}
|
|
+ list_splice(&tmp, &expr->expressions);
|
|
datatype_set(expr, concat_type_alloc(ntype));
|
|
break;
|
|
}
|
|
--
|
|
2.39.1
|
|
|