* 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
 | |
| 
 |