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