public inbox for gentoo-commits@lists.gentoo.org
 help / color / mirror / Atom feed
From: "Mike Gilbert" <floppym@gentoo.org>
To: gentoo-commits@lists.gentoo.org
Subject: [gentoo-commits] repo/gentoo:master commit in: net-firewall/nftables/files/, net-firewall/nftables/
Date: Fri, 17 Jun 2022 16:18:09 +0000 (UTC)	[thread overview]
Message-ID: <1655482601.8c7d289358511150d712e08b2cbb175b1374d9f7.floppym@gentoo> (raw)

commit:     8c7d289358511150d712e08b2cbb175b1374d9f7
Author:     Mike Gilbert <floppym <AT> gentoo <DOT> org>
AuthorDate: Fri Jun 17 16:16:41 2022 +0000
Commit:     Mike Gilbert <floppym <AT> gentoo <DOT> org>
CommitDate: Fri Jun 17 16:16:41 2022 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=8c7d2893

net-firewall/nftables: backport upstream revert

Closes: https://bugs.gentoo.org/852662
Signed-off-by: Mike Gilbert <floppym <AT> gentoo.org>

 ....4-revert-scanner-flags-move-to-own-scope.patch | 252 +++++++++++++++++++++
 ...ables-1.0.4.ebuild => nftables-1.0.4-r1.ebuild} |   3 +
 2 files changed, 255 insertions(+)

diff --git a/net-firewall/nftables/files/nftables-1.0.4-revert-scanner-flags-move-to-own-scope.patch b/net-firewall/nftables/files/nftables-1.0.4-revert-scanner-flags-move-to-own-scope.patch
new file mode 100644
index 000000000000..db58602bb4e6
--- /dev/null
+++ b/net-firewall/nftables/files/nftables-1.0.4-revert-scanner-flags-move-to-own-scope.patch
@@ -0,0 +1,252 @@
+From 638af0ceb2b22307098bb2730822e148ef0b9424 Mon Sep 17 00:00:00 2001
+From: Florian Westphal <fw@strlen.de>
+Date: Fri, 10 Jun 2022 13:01:46 +0200
+Subject: Revert "scanner: flags: move to own scope"
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Excess nesting of scanner scopes is very fragile and error prone:
+
+rule `iif != lo ip daddr 127.0.0.1/8 counter limit rate 1/second log flags all prefix "nft_lo4 " drop`
+fails with `Error: No symbol type information` hinting at `prefix`
+
+Problem is that we nest via:
+ counter
+   limit
+     log
+    flags
+
+By the time 'prefix' is scanned, state is still stuck in 'counter' due
+to this nesting.  Working around "prefix" isn't enough, any other
+keyword, e.g. "level" in 'flags all level debug' will be parsed as 'string' too.
+
+So, revert this.
+
+Fixes: a16697097e2b ("scanner: flags: move to own scope")
+Reported-by: Christian Göttsche <cgzones@googlemail.com>
+Signed-off-by: Florian Westphal <fw@strlen.de>
+---
+ include/parser.h                  |  1 -
+ src/parser_bison.y                | 29 ++++++++++++++---------------
+ src/scanner.l                     | 18 +++++++-----------
+ tests/shell/testcases/parsing/log | 10 ++++++++++
+ 4 files changed, 31 insertions(+), 27 deletions(-)
+ create mode 100755 tests/shell/testcases/parsing/log
+
+diff --git a/include/parser.h b/include/parser.h
+index f32154cc..d8d2eb11 100644
+--- a/include/parser.h
++++ b/include/parser.h
+@@ -35,7 +35,6 @@ enum startcond_type {
+ 	PARSER_SC_CT,
+ 	PARSER_SC_COUNTER,
+ 	PARSER_SC_ETH,
+-	PARSER_SC_FLAGS,
+ 	PARSER_SC_ICMP,
+ 	PARSER_SC_IGMP,
+ 	PARSER_SC_IP,
+diff --git a/src/parser_bison.y b/src/parser_bison.y
+index ca5c488c..2a0240fb 100644
+--- a/src/parser_bison.y
++++ b/src/parser_bison.y
+@@ -942,7 +942,6 @@ close_scope_esp		: { scanner_pop_start_cond(nft->scanner, PARSER_SC_EXPR_ESP); }
+ close_scope_eth		: { scanner_pop_start_cond(nft->scanner, PARSER_SC_ETH); };
+ close_scope_export	: { scanner_pop_start_cond(nft->scanner, PARSER_SC_CMD_EXPORT); };
+ close_scope_fib		: { scanner_pop_start_cond(nft->scanner, PARSER_SC_EXPR_FIB); };
+-close_scope_flags	: { scanner_pop_start_cond(nft->scanner, PARSER_SC_FLAGS); };
+ close_scope_frag	: { scanner_pop_start_cond(nft->scanner, PARSER_SC_EXPR_FRAG); };
+ close_scope_fwd		: { scanner_pop_start_cond(nft->scanner, PARSER_SC_STMT_FWD); };
+ close_scope_hash	: { scanner_pop_start_cond(nft->scanner, PARSER_SC_EXPR_HASH); };
+@@ -1679,7 +1678,7 @@ table_block_alloc	:	/* empty */
+ 			}
+ 			;
+ 
+-table_options		:	FLAGS		STRING	close_scope_flags
++table_options		:	FLAGS		STRING
+ 			{
+ 				if (strcmp($2, "dormant") == 0) {
+ 					$<table>0->flags |= TABLE_F_DORMANT;
+@@ -1946,7 +1945,7 @@ set_block		:	/* empty */	{ $$ = $<set>-1; }
+ 				datatype_set($1->key, $3->dtype);
+ 				$$ = $1;
+ 			}
+-			|	set_block	FLAGS		set_flag_list	stmt_separator	close_scope_flags
++			|	set_block	FLAGS		set_flag_list	stmt_separator
+ 			{
+ 				$1->flags = $3;
+ 				$$ = $1;
+@@ -2080,7 +2079,7 @@ map_block		:	/* empty */	{ $$ = $<set>-1; }
+ 				$1->flags  |= NFT_SET_OBJECT;
+ 				$$ = $1;
+ 			}
+-			|	map_block	FLAGS		set_flag_list	stmt_separator	close_scope_flags
++			|	map_block	FLAGS		set_flag_list	stmt_separator
+ 			{
+ 				$1->flags |= $3;
+ 				$$ = $1;
+@@ -2153,7 +2152,7 @@ flowtable_block		:	/* empty */	{ $$ = $<flowtable>-1; }
+ 			{
+ 				$$->flags |= NFT_FLOWTABLE_COUNTER;
+ 			}
+-			|	flowtable_block	FLAGS	OFFLOAD	stmt_separator	close_scope_flags
++			|	flowtable_block	FLAGS	OFFLOAD	stmt_separator
+ 			{
+ 				$$->flags |= FLOWTABLE_F_HW_OFFLOAD;
+ 			}
+@@ -2520,7 +2519,7 @@ dev_spec		:	DEVICE	string
+ 			|	/* empty */		{ $$ = NULL; }
+ 			;
+ 
+-flags_spec		:	FLAGS		OFFLOAD	close_scope_flags
++flags_spec		:	FLAGS		OFFLOAD
+ 			{
+ 				$<chain>0->flags |= CHAIN_F_HW_OFFLOAD;
+ 			}
+@@ -3126,7 +3125,7 @@ log_arg			:	PREFIX			string
+ 				$<stmt>0->log.level	= $2;
+ 				$<stmt>0->log.flags 	|= STMT_LOG_LEVEL;
+ 			}
+-			|	FLAGS			log_flags	close_scope_flags
++			|	FLAGS			log_flags
+ 			{
+ 				$<stmt>0->log.logflags	|= $2;
+ 			}
+@@ -3828,13 +3827,13 @@ queue_stmt		:	queue_stmt_compat	close_scope_queue
+ 			{
+ 				$$ = queue_stmt_alloc(&@$, $3, 0);
+ 			}
+-			|	QUEUE FLAGS	queue_stmt_flags close_scope_flags TO queue_stmt_expr close_scope_queue
++			|	QUEUE FLAGS	queue_stmt_flags TO queue_stmt_expr close_scope_queue
+ 			{
+-				$$ = queue_stmt_alloc(&@$, $6, $3);
++				$$ = queue_stmt_alloc(&@$, $5, $3);
+ 			}
+-			|	QUEUE	FLAGS	queue_stmt_flags close_scope_flags QUEUENUM queue_stmt_expr_simple close_scope_queue
++			|	QUEUE	FLAGS	queue_stmt_flags QUEUENUM queue_stmt_expr_simple close_scope_queue
+ 			{
+-				$$ = queue_stmt_alloc(&@$, $6, $3);
++				$$ = queue_stmt_alloc(&@$, $5, $3);
+ 			}
+ 			;
+ 
+@@ -5501,7 +5500,7 @@ comp_hdr_expr		:	COMP	comp_hdr_field	close_scope_comp
+ 			;
+ 
+ comp_hdr_field		:	NEXTHDR		{ $$ = COMPHDR_NEXTHDR; }
+-			|	FLAGS	close_scope_flags	{ $$ = COMPHDR_FLAGS; }
++			|	FLAGS		{ $$ = COMPHDR_FLAGS; }
+ 			|	CPI		{ $$ = COMPHDR_CPI; }
+ 			;
+ 
+@@ -5562,7 +5561,7 @@ tcp_hdr_field		:	SPORT		{ $$ = TCPHDR_SPORT; }
+ 			|	ACKSEQ		{ $$ = TCPHDR_ACKSEQ; }
+ 			|	DOFF		{ $$ = TCPHDR_DOFF; }
+ 			|	RESERVED	{ $$ = TCPHDR_RESERVED; }
+-			|	FLAGS	close_scope_flags	{ $$ = TCPHDR_FLAGS; }
++			|	FLAGS		{ $$ = TCPHDR_FLAGS; }
+ 			|	WINDOW		{ $$ = TCPHDR_WINDOW; }
+ 			|	CHECKSUM	{ $$ = TCPHDR_CHECKSUM; }
+ 			|	URGPTR		{ $$ = TCPHDR_URGPTR; }
+@@ -5676,7 +5675,7 @@ sctp_chunk_type		:	DATA		{ $$ = SCTP_CHUNK_TYPE_DATA; }
+ 			;
+ 
+ sctp_chunk_common_field	:	TYPE	close_scope_type	{ $$ = SCTP_CHUNK_COMMON_TYPE; }
+-			|	FLAGS	close_scope_flags	{ $$ = SCTP_CHUNK_COMMON_FLAGS; }
++			|	FLAGS	{ $$ = SCTP_CHUNK_COMMON_FLAGS; }
+ 			|	LENGTH	{ $$ = SCTP_CHUNK_COMMON_LENGTH; }
+ 			;
+ 
+@@ -5844,7 +5843,7 @@ rt4_hdr_expr		:	RT4	rt4_hdr_field	close_scope_rt
+ 			;
+ 
+ rt4_hdr_field		:	LAST_ENT	{ $$ = RT4HDR_LASTENT; }
+-			|	FLAGS	close_scope_flags	{ $$ = RT4HDR_FLAGS; }
++			|	FLAGS		{ $$ = RT4HDR_FLAGS; }
+ 			|	TAG		{ $$ = RT4HDR_TAG; }
+ 			|	SID		'['	NUM	']'
+ 			{
+diff --git a/src/scanner.l b/src/scanner.l
+index 2154281e..7eb74020 100644
+--- a/src/scanner.l
++++ b/src/scanner.l
+@@ -201,7 +201,6 @@ addrstring	({macaddr}|{ip4addr}|{ip6addr})
+ %s SCANSTATE_CT
+ %s SCANSTATE_COUNTER
+ %s SCANSTATE_ETH
+-%s SCANSTATE_FLAGS
+ %s SCANSTATE_ICMP
+ %s SCANSTATE_IGMP
+ %s SCANSTATE_IP
+@@ -339,7 +338,7 @@ addrstring	({macaddr}|{ip4addr}|{ip6addr})
+ "jump"			{ return JUMP; }
+ "goto"			{ return GOTO; }
+ "return"		{ return RETURN; }
+-<SCANSTATE_EXPR_QUEUE,SCANSTATE_STMT_DUP,SCANSTATE_STMT_FWD,SCANSTATE_STMT_NAT,SCANSTATE_STMT_TPROXY,SCANSTATE_FLAGS,SCANSTATE_IP,SCANSTATE_IP6>"to"			{ return TO; } /* XXX: SCANSTATE_FLAGS and SCANSTATE_IP here are workarounds */
++<SCANSTATE_EXPR_QUEUE,SCANSTATE_STMT_DUP,SCANSTATE_STMT_FWD,SCANSTATE_STMT_NAT,SCANSTATE_STMT_TPROXY,SCANSTATE_IP,SCANSTATE_IP6>"to"			{ return TO; } /* XXX: SCANSTATE_IP is a workaround */
+ 
+ "inet"			{ return INET; }
+ "netdev"		{ return NETDEV; }
+@@ -363,14 +362,9 @@ addrstring	({macaddr}|{ip4addr}|{ip6addr})
+ "index"			{ return INDEX; }
+ "comment"		{ return COMMENT; }
+ 
+-<SCANSTATE_FLAGS>{
+-	"constant"		{ return CONSTANT; }
+-	"dynamic"		{ return DYNAMIC; }
+-
+-	/* log flags */
+-	"all"			{ return ALL; }
+-}
++"constant"		{ return CONSTANT; }
+ "interval"		{ return INTERVAL; }
++"dynamic"		{ return DYNAMIC; }
+ "auto-merge"		{ return AUTOMERGE; }
+ "timeout"		{ return TIMEOUT; }
+ "gc-interval"		{ return GC_INTERVAL; }
+@@ -418,7 +412,7 @@ addrstring	({macaddr}|{ip4addr}|{ip6addr})
+ }
+ 
+ "queue"			{ scanner_push_start_cond(yyscanner, SCANSTATE_EXPR_QUEUE); return QUEUE;}
+-<SCANSTATE_FLAGS,SCANSTATE_EXPR_QUEUE>{
++<SCANSTATE_EXPR_QUEUE>{
+ 	"num"		{ return QUEUENUM;}
+ 	"bypass"	{ return BYPASS;}
+ 	"fanout"	{ return FANOUT;}
+@@ -612,7 +606,7 @@ addrstring	({macaddr}|{ip4addr}|{ip6addr})
+ <SCANSTATE_EXPR_COMP>{
+ 	"cpi"			{ return CPI; }
+ }
+-"flags"			{ scanner_push_start_cond(yyscanner, SCANSTATE_FLAGS); return FLAGS; }
++"flags"			{ return FLAGS; }
+ 
+ "udp"			{ scanner_push_start_cond(yyscanner, SCANSTATE_EXPR_UDP); return UDP; }
+ "udplite"		{ scanner_push_start_cond(yyscanner, SCANSTATE_EXPR_UDPLITE); return UDPLITE; }
+@@ -781,6 +775,8 @@ addrstring	({macaddr}|{ip4addr}|{ip6addr})
+ 
+ "notrack"		{ return NOTRACK; }
+ 
++"all"			{ return ALL; }
++
+ <SCANSTATE_CMD_EXPORT,SCANSTATE_CMD_IMPORT,SCANSTATE_CMD_MONITOR>{
+ 	"xml"			{ return XML; }
+ 	"json"			{ return JSON; }
+diff --git a/tests/shell/testcases/parsing/log b/tests/shell/testcases/parsing/log
+new file mode 100755
+index 00000000..0b89d589
+--- /dev/null
++++ b/tests/shell/testcases/parsing/log
+@@ -0,0 +1,10 @@
++#!/bin/bash
++
++$NFT add table t || exit 1
++$NFT add chain t c || exit 1
++$NFT add rule t c 'iif != lo ip daddr 127.0.0.1/8 counter limit rate 1/second log flags all prefix "nft_lo4 " drop' || exit 1
++$NFT add rule t c 'iif != lo ip daddr 127.0.0.1/8 counter limit rate 1/second log flags all level debug drop' || exit 1
++$NFT delete table t || exit 1
++
++exit 0
++
+-- 
+cgit v1.2.3
+

diff --git a/net-firewall/nftables/nftables-1.0.4.ebuild b/net-firewall/nftables/nftables-1.0.4-r1.ebuild
similarity index 98%
rename from net-firewall/nftables/nftables-1.0.4.ebuild
rename to net-firewall/nftables/nftables-1.0.4-r1.ebuild
index d3b5ea2ddc40..0bab2b816c54 100644
--- a/net-firewall/nftables/nftables-1.0.4.ebuild
+++ b/net-firewall/nftables/nftables-1.0.4-r1.ebuild
@@ -70,6 +70,9 @@ pkg_setup() {
 }
 
 src_prepare() {
+	local PATCHES=(
+		"${FILESDIR}/nftables-1.0.4-revert-scanner-flags-move-to-own-scope.patch"
+	)
 	default
 
 	if [[ ${PV} =~ ^[9]{4,}$ ]] ; then


             reply	other threads:[~2022-06-17 16:18 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-06-17 16:18 Mike Gilbert [this message]
  -- strict thread matches above, loose matches on Subject: below --
2024-02-20  5:06 [gentoo-commits] repo/gentoo:master commit in: net-firewall/nftables/files/, net-firewall/nftables/ Sam James
2023-07-19 18:45 Sam James
2022-06-17 16:18 Mike Gilbert
2022-02-24 17:21 Patrick McLean
2021-05-09  9:33 David Seifert
2021-01-21 23:15 Lars Wendler
2020-11-08  3:02 Patrick McLean
2020-11-08  2:59 Patrick McLean
2020-04-02  7:47 Lars Wendler
2019-06-28 11:49 Lars Wendler
2018-01-18 14:21 Lars Wendler
2016-07-03 22:08 Göktürk Yüksek
2015-10-15  9:06 Ian Delaney

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1655482601.8c7d289358511150d712e08b2cbb175b1374d9f7.floppym@gentoo \
    --to=floppym@gentoo.org \
    --cc=gentoo-commits@lists.gentoo.org \
    --cc=gentoo-dev@lists.gentoo.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox