[arch-commits] Commit in nftables/trunk (2 files)
Christian Hesse
eworm at gemini.archlinux.org
Tue Jun 7 09:28:16 UTC 2022
Date: Tuesday, June 7, 2022 @ 09:28:15
Author: eworm
Revision: 447701
upgpkg: nftables 1:1.0.3-2: apply: evaluate: reset ctx->set after set interval evaluation
Added:
nftables/trunk/0001-evaluate-reset-ctx-set-after-set-interval-evaluation.patch
Modified:
nftables/trunk/PKGBUILD
-----------------------------------------------------------------+
0001-evaluate-reset-ctx-set-after-set-interval-evaluation.patch | 106 ++++++++++
PKGBUILD | 4
2 files changed, 109 insertions(+), 1 deletion(-)
Added: 0001-evaluate-reset-ctx-set-after-set-interval-evaluation.patch
===================================================================
--- 0001-evaluate-reset-ctx-set-after-set-interval-evaluation.patch (rev 0)
+++ 0001-evaluate-reset-ctx-set-after-set-interval-evaluation.patch 2022-06-07 09:28:15 UTC (rev 447701)
@@ -0,0 +1,106 @@
+From 818f7dded9c9e8a89a2de98801425536180ae307 Mon Sep 17 00:00:00 2001
+From: Pablo Neira Ayuso <pablo at netfilter.org>
+Date: Wed, 1 Jun 2022 19:09:31 +0200
+Subject: evaluate: reset ctx->set after set interval evaluation
+
+Otherwise bogus error reports on set datatype mismatch might occur, such as:
+
+Error: datatype mismatch, expected Internet protocol, expression has type IPv4 address
+ meta l4proto { tcp, udp } th dport 443 dnat to 10.0.0.1
+ ~~~~~~~~~~~~ ^^^^^^^^^^^^
+
+with an unrelated set declaration.
+
+table ip test {
+ set set_with_interval {
+ type ipv4_addr
+ flags interval
+ }
+
+ chain prerouting {
+ type nat hook prerouting priority dstnat; policy accept;
+ meta l4proto { tcp, udp } th dport 443 dnat to 10.0.0.1
+ }
+}
+
+This bug has been introduced in the evaluation step.
+
+Reported-by: Roman Petrov <nwhisper at gmail.com>
+Fixes: 81e36530fcac ("src: replace interval segment tree overlap and automerge)"
+Signed-off-by: Pablo Neira Ayuso <pablo at netfilter.org>
+---
+ src/evaluate.c | 10 ++++++----
+ tests/shell/testcases/sets/dumps/set_eval_0.nft | 11 +++++++++++
+ tests/shell/testcases/sets/set_eval_0 | 17 +++++++++++++++++
+ 3 files changed, 34 insertions(+), 4 deletions(-)
+ create mode 100644 tests/shell/testcases/sets/dumps/set_eval_0.nft
+ create mode 100755 tests/shell/testcases/sets/set_eval_0
+
+diff --git a/src/evaluate.c b/src/evaluate.c
+index 1447a4c2..82bf1311 100644
+--- a/src/evaluate.c
++++ b/src/evaluate.c
+@@ -4005,8 +4005,9 @@ static int setelem_evaluate(struct eval_ctx *ctx, struct cmd *cmd)
+ cmd->elem.set = set_get(set);
+
+ if (set_is_interval(ctx->set->flags) &&
+- !(set->flags & NFT_SET_CONCAT))
+- return interval_set_eval(ctx, ctx->set, cmd->expr);
++ !(set->flags & NFT_SET_CONCAT) &&
++ interval_set_eval(ctx, ctx->set, cmd->expr) < 0)
++ return -1;
+
+ ctx->set = NULL;
+
+@@ -4184,8 +4185,9 @@ static int set_evaluate(struct eval_ctx *ctx, struct set *set)
+ }
+
+ if (set_is_interval(ctx->set->flags) &&
+- !(ctx->set->flags & NFT_SET_CONCAT))
+- return interval_set_eval(ctx, ctx->set, set->init);
++ !(ctx->set->flags & NFT_SET_CONCAT) &&
++ interval_set_eval(ctx, ctx->set, set->init) < 0)
++ return -1;
+
+ ctx->set = NULL;
+
+diff --git a/tests/shell/testcases/sets/dumps/set_eval_0.nft b/tests/shell/testcases/sets/dumps/set_eval_0.nft
+new file mode 100644
+index 00000000..a45462b8
+--- /dev/null
++++ b/tests/shell/testcases/sets/dumps/set_eval_0.nft
+@@ -0,0 +1,11 @@
++table ip nat {
++ set set_with_interval {
++ type ipv4_addr
++ flags interval
++ }
++
++ chain prerouting {
++ type nat hook prerouting priority dstnat; policy accept;
++ meta l4proto { tcp, udp } th dport 443 dnat to 10.0.0.1
++ }
++}
+diff --git a/tests/shell/testcases/sets/set_eval_0 b/tests/shell/testcases/sets/set_eval_0
+new file mode 100755
+index 00000000..82b6d3bc
+--- /dev/null
++++ b/tests/shell/testcases/sets/set_eval_0
+@@ -0,0 +1,17 @@
++#!/bin/bash
++
++set -e
++
++RULESET="table ip nat {
++ set set_with_interval {
++ type ipv4_addr
++ flags interval
++ }
++
++ chain prerouting {
++ type nat hook prerouting priority dstnat; policy accept;
++ meta l4proto { tcp, udp } th dport 443 dnat to 10.0.0.1
++ }
++}"
++
++$NFT -f - <<< $RULESET
Modified: PKGBUILD
===================================================================
--- PKGBUILD 2022-06-07 09:21:39 UTC (rev 447700)
+++ PKGBUILD 2022-06-07 09:28:15 UTC (rev 447701)
@@ -3,7 +3,7 @@
pkgname=nftables
epoch=1
pkgver=1.0.3
-pkgrel=1
+pkgrel=2
pkgdesc='Netfilter tables userspace tools'
arch=('x86_64')
url='https://netfilter.org/projects/nftables/'
@@ -14,11 +14,13 @@
backup=('etc/nftables.conf')
validpgpkeys=('37D964ACC04981C75500FB9BD55D978A8A1420E4') # Netfilter Core Team
source=("https://netfilter.org/projects/nftables/files/nftables-$pkgver.tar.bz2"{,.sig}
+ '0001-evaluate-reset-ctx-set-after-set-interval-evaluation.patch'
'nftables.conf'
'nftables.service')
install=nftables.install
sha256sums=('47c4eba0105ebd3ffa89553e0702ccb34d8906a91f72ced58ab0d992b29c7748'
'SKIP'
+ '4f02929d20a0cad1e988cef05b29539725142bf0a69cc3ab42cf4010de0a4f54'
'2aff88019097d21dbfa4713f5b54c184751c86376e458b683f8d90f3abd232a8'
'deffeef36fe658867dd9203ec13dec85047a6d224ea63334dcf60db97e1809ea')
More information about the arch-commits
mailing list