Update to 1.8.8. Fixes rhbz#2085503
This commit is contained in:
parent
0f9f220b67
commit
8e6fc4330b
1
.gitignore
vendored
1
.gitignore
vendored
@ -11,3 +11,4 @@
|
||||
/iptables-1.8.5.tar.bz2
|
||||
/iptables-1.8.6.tar.bz2
|
||||
/iptables-1.8.7.tar.bz2
|
||||
/iptables-1.8.8.tar.bz2
|
||||
|
@ -1,51 +0,0 @@
|
||||
From df7ed83da048317d344b34e9c38e31035e508f24 Mon Sep 17 00:00:00 2001
|
||||
From: Phil Sutter <phil@nwl.cc>
|
||||
Date: Thu, 28 Jan 2021 01:09:56 +0100
|
||||
Subject: [PATCH] ebtables: Exit gracefully on invalid table names
|
||||
|
||||
Users are able to cause program abort by passing a table name that
|
||||
doesn't exist:
|
||||
|
||||
| # ebtables-nft -t dummy -P INPUT ACCEPT
|
||||
| ebtables: nft-cache.c:455: fetch_chain_cache: Assertion `t' failed.
|
||||
| Aborted
|
||||
|
||||
Avoid this by checking table existence just like iptables-nft does upon
|
||||
parsing '-t' optarg. Since the list of tables is known and fixed,
|
||||
checking the given name's length is pointless. So just drop that check
|
||||
in return.
|
||||
|
||||
With this patch in place, output looks much better:
|
||||
|
||||
| # ebtables-nft -t dummy -P INPUT ACCEPT
|
||||
| ebtables v1.8.7 (nf_tables): table 'dummy' does not exist
|
||||
| Perhaps iptables or your kernel needs to be upgraded.
|
||||
|
||||
Signed-off-by: Phil Sutter <phil@nwl.cc>
|
||||
(cherry picked from commit 30c1d443896311e69762d6b51b63908ec602574f)
|
||||
---
|
||||
iptables/xtables-eb.c | 8 ++++----
|
||||
1 file changed, 4 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/iptables/xtables-eb.c b/iptables/xtables-eb.c
|
||||
index cfa9317c78e94..5bb34d6d292a9 100644
|
||||
--- a/iptables/xtables-eb.c
|
||||
+++ b/iptables/xtables-eb.c
|
||||
@@ -914,10 +914,10 @@ print_zero:
|
||||
xtables_error(PARAMETER_PROBLEM,
|
||||
"The -t option (seen in line %u) cannot be used in %s.\n",
|
||||
line, xt_params->program_name);
|
||||
- if (strlen(optarg) > EBT_TABLE_MAXNAMELEN - 1)
|
||||
- xtables_error(PARAMETER_PROBLEM,
|
||||
- "Table name length cannot exceed %d characters",
|
||||
- EBT_TABLE_MAXNAMELEN - 1);
|
||||
+ if (!nft_table_builtin_find(h, optarg))
|
||||
+ xtables_error(VERSION_PROBLEM,
|
||||
+ "table '%s' does not exist",
|
||||
+ optarg);
|
||||
*table = optarg;
|
||||
table_set = true;
|
||||
break;
|
||||
--
|
||||
2.31.1
|
||||
|
29
0001-xshared-Fix-build-for-Werror-format-security.patch
Normal file
29
0001-xshared-Fix-build-for-Werror-format-security.patch
Normal file
@ -0,0 +1,29 @@
|
||||
From fe9bd3b29dd7661e6f74c24db8356014798d1d78 Mon Sep 17 00:00:00 2001
|
||||
From: Phil Sutter <phil@nwl.cc>
|
||||
Date: Fri, 13 May 2022 16:51:58 +0200
|
||||
Subject: [PATCH] xshared: Fix build for -Werror=format-security
|
||||
|
||||
Gcc complains about the omitted format string.
|
||||
|
||||
Signed-off-by: Phil Sutter <phil@nwl.cc>
|
||||
(cherry picked from commit b72eb12ea5a61df0655ad99d5048994e916be83a)
|
||||
---
|
||||
iptables/xshared.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/iptables/xshared.c b/iptables/xshared.c
|
||||
index fae5ddd5df93e..a8512d3808154 100644
|
||||
--- a/iptables/xshared.c
|
||||
+++ b/iptables/xshared.c
|
||||
@@ -1307,7 +1307,7 @@ static void check_empty_interface(struct xtables_args *args, const char *arg)
|
||||
return;
|
||||
|
||||
if (args->family != NFPROTO_ARP)
|
||||
- xtables_error(PARAMETER_PROBLEM, msg);
|
||||
+ xtables_error(PARAMETER_PROBLEM, "%s", msg);
|
||||
|
||||
fprintf(stderr, "%s", msg);
|
||||
}
|
||||
--
|
||||
2.34.1
|
||||
|
@ -1,104 +0,0 @@
|
||||
From 56f5ee8dee86d4ceaeac7eb6e1eaaa2ac3a1d0f8 Mon Sep 17 00:00:00 2001
|
||||
From: Florian Westphal <fw@strlen.de>
|
||||
Date: Wed, 24 Feb 2021 11:08:02 +0100
|
||||
Subject: [PATCH] iptables-nft: fix -Z option
|
||||
|
||||
it zeroes the rule counters, so it needs fully populated cache.
|
||||
Add a test case to cover this.
|
||||
|
||||
Fixes: 9d07514ac5c7a ("nft: calculate cache requirements from list of commands")
|
||||
Signed-off-by: Florian Westphal <fw@strlen.de>
|
||||
Acked-by: Phil Sutter <phil@nwl.cc>
|
||||
(cherry picked from commit 5f1fcacebf9b4529950b6e3f88327049a0ea7cd2)
|
||||
---
|
||||
iptables/nft-cmd.c | 2 +-
|
||||
.../testcases/iptables/0007-zero-counters_0 | 64 +++++++++++++++++++
|
||||
2 files changed, 65 insertions(+), 1 deletion(-)
|
||||
create mode 100755 iptables/tests/shell/testcases/iptables/0007-zero-counters_0
|
||||
|
||||
diff --git a/iptables/nft-cmd.c b/iptables/nft-cmd.c
|
||||
index 5d33f1f00f574..f2b935c57dab4 100644
|
||||
--- a/iptables/nft-cmd.c
|
||||
+++ b/iptables/nft-cmd.c
|
||||
@@ -185,7 +185,7 @@ int nft_cmd_chain_zero_counters(struct nft_handle *h, const char *chain,
|
||||
if (!cmd)
|
||||
return 0;
|
||||
|
||||
- nft_cache_level_set(h, NFT_CL_CHAINS, cmd);
|
||||
+ nft_cache_level_set(h, NFT_CL_RULES, cmd);
|
||||
|
||||
return 1;
|
||||
}
|
||||
diff --git a/iptables/tests/shell/testcases/iptables/0007-zero-counters_0 b/iptables/tests/shell/testcases/iptables/0007-zero-counters_0
|
||||
new file mode 100755
|
||||
index 0000000000000..36da1907e3b22
|
||||
--- /dev/null
|
||||
+++ b/iptables/tests/shell/testcases/iptables/0007-zero-counters_0
|
||||
@@ -0,0 +1,64 @@
|
||||
+#!/bin/bash
|
||||
+
|
||||
+RC=0
|
||||
+COUNTR=$RANDOM$RANDOM
|
||||
+
|
||||
+$XT_MULTI iptables-restore -c <<EOF
|
||||
+*filter
|
||||
+:INPUT ACCEPT [1:23]
|
||||
+:FOO - [0:0]
|
||||
+[12:345] -A INPUT -i lo -p icmp -m comment --comment "$COUNTR"
|
||||
+[22:123] -A FOO -m comment --comment one
|
||||
+[44:123] -A FOO -m comment --comment two
|
||||
+COMMIT
|
||||
+EOF
|
||||
+EXPECT="*filter
|
||||
+:INPUT ACCEPT [0:0]
|
||||
+:FORWARD ACCEPT [0:0]
|
||||
+:OUTPUT ACCEPT [0:0]
|
||||
+:FOO - [0:0]
|
||||
+[0:0] -A INPUT -i lo -p icmp -m comment --comment "$COUNTR"
|
||||
+[0:0] -A FOO -m comment --comment one
|
||||
+[0:0] -A FOO -m comment --comment two
|
||||
+COMMIT"
|
||||
+
|
||||
+COUNTER=$($XT_MULTI iptables-save -c |grep "comment $COUNTR"| cut -f 1 -d " ")
|
||||
+if [ $COUNTER != "[12:345]" ]; then
|
||||
+ echo "Counter $COUNTER is wrong, expected 12:345"
|
||||
+ RC=1
|
||||
+fi
|
||||
+
|
||||
+$XT_MULTI iptables -Z FOO
|
||||
+COUNTER=$($XT_MULTI iptables-save -c |grep "comment $COUNTR"| cut -f 1 -d " ")
|
||||
+if [ $COUNTER = "[0:0]" ]; then
|
||||
+ echo "Counter $COUNTER is wrong, should not have been zeroed"
|
||||
+ RC=1
|
||||
+fi
|
||||
+
|
||||
+for c in one two; do
|
||||
+ COUNTER=$($XT_MULTI iptables-save -c |grep "comment $c"| cut -f 1 -d " ")
|
||||
+ if [ $COUNTER != "[0:0]" ]; then
|
||||
+ echo "Counter $COUNTER is wrong, should have been zeroed at rule $c"
|
||||
+ RC=1
|
||||
+ fi
|
||||
+done
|
||||
+
|
||||
+$XT_MULTI iptables -Z
|
||||
+COUNTER=$($XT_MULTI iptables-save -c |grep "comment $COUNTR"| cut -f 1 -d " ")
|
||||
+
|
||||
+if [ $COUNTER != "[0:0]" ]; then
|
||||
+ echo "Counter $COUNTER is wrong, expected 0:0 after -Z"
|
||||
+ RC=1
|
||||
+fi
|
||||
+
|
||||
+diff -u -Z <(echo -e "$EXPECT") <($XT_MULTI iptables-save -c | grep -v '^#')
|
||||
+if [ $? -ne 0 ]; then
|
||||
+ echo "Diff error: counters were not zeroed"
|
||||
+ RC=1
|
||||
+fi
|
||||
+
|
||||
+$XT_MULTI iptables -D INPUT -i lo -p icmp -m comment --comment "$COUNTR"
|
||||
+$XT_MULTI iptables -D FOO -m comment --comment one
|
||||
+$XT_MULTI iptables -D FOO -m comment --comment two
|
||||
+$XT_MULTI iptables -X FOO
|
||||
+exit $RC
|
||||
--
|
||||
2.31.1
|
||||
|
@ -1,73 +0,0 @@
|
||||
From 6c6a870ececab6eac0065e3a1f539f30bfb0cd25 Mon Sep 17 00:00:00 2001
|
||||
From: Phil Sutter <phil@nwl.cc>
|
||||
Date: Fri, 19 Feb 2021 16:54:57 +0100
|
||||
Subject: [PATCH] nft: Fix bitwise expression avoidance detection
|
||||
|
||||
Byte-boundary prefix detection was too sloppy: Any data following the
|
||||
first zero-byte was ignored. Add a follow-up loop making sure there are
|
||||
no stray bits in the designated host part.
|
||||
|
||||
Fixes: 323259001d617 ("nft: Optimize class-based IP prefix matches")
|
||||
Signed-off-by: Phil Sutter <phil@nwl.cc>
|
||||
(cherry picked from commit 330f5df03ad589b46865ceedf2a54cf10a4225ba)
|
||||
---
|
||||
iptables/nft-shared.c | 4 +++-
|
||||
.../testcases/ip6tables/0004-address-masks_0 | 24 +++++++++++++++++++
|
||||
2 files changed, 27 insertions(+), 1 deletion(-)
|
||||
create mode 100755 iptables/tests/shell/testcases/ip6tables/0004-address-masks_0
|
||||
|
||||
diff --git a/iptables/nft-shared.c b/iptables/nft-shared.c
|
||||
index 10553ab26823b..c1664b50f9383 100644
|
||||
--- a/iptables/nft-shared.c
|
||||
+++ b/iptables/nft-shared.c
|
||||
@@ -166,7 +166,7 @@ void add_addr(struct nftnl_rule *r, enum nft_payload_bases base, int offset,
|
||||
{
|
||||
const unsigned char *m = mask;
|
||||
bool bitwise = false;
|
||||
- int i;
|
||||
+ int i, j;
|
||||
|
||||
for (i = 0; i < len; i++) {
|
||||
if (m[i] != 0xff) {
|
||||
@@ -174,6 +174,8 @@ void add_addr(struct nftnl_rule *r, enum nft_payload_bases base, int offset,
|
||||
break;
|
||||
}
|
||||
}
|
||||
+ for (j = i + 1; !bitwise && j < len; j++)
|
||||
+ bitwise = !!m[j];
|
||||
|
||||
if (!bitwise)
|
||||
len = i;
|
||||
diff --git a/iptables/tests/shell/testcases/ip6tables/0004-address-masks_0 b/iptables/tests/shell/testcases/ip6tables/0004-address-masks_0
|
||||
new file mode 100755
|
||||
index 0000000000000..7eb42f08da975
|
||||
--- /dev/null
|
||||
+++ b/iptables/tests/shell/testcases/ip6tables/0004-address-masks_0
|
||||
@@ -0,0 +1,24 @@
|
||||
+#!/bin/bash
|
||||
+
|
||||
+set -e
|
||||
+
|
||||
+$XT_MULTI ip6tables-restore <<EOF
|
||||
+*filter
|
||||
+-A FORWARD -s feed:babe::/ffff::0
|
||||
+-A FORWARD -s feed:babe::/ffff:ff00::0
|
||||
+-A FORWARD -s feed:babe::/ffff:fff0::0
|
||||
+-A FORWARD -s feed:babe::/ffff:ffff::0
|
||||
+-A FORWARD -s feed:babe::/0:ffff::0
|
||||
+-A FORWARD -s feed:c0ff::babe:f00/ffff::ffff:0
|
||||
+COMMIT
|
||||
+EOF
|
||||
+
|
||||
+EXPECT='-P FORWARD ACCEPT
|
||||
+-A FORWARD -s feed::/16
|
||||
+-A FORWARD -s feed:ba00::/24
|
||||
+-A FORWARD -s feed:bab0::/28
|
||||
+-A FORWARD -s feed:babe::/32
|
||||
+-A FORWARD -s 0:babe::/0:ffff::
|
||||
+-A FORWARD -s feed::babe:0/ffff::ffff:0'
|
||||
+
|
||||
+diff -u -Z <(echo -e "$EXPECT") <($XT_MULTI ip6tables -S FORWARD)
|
||||
--
|
||||
2.31.1
|
||||
|
@ -1,80 +0,0 @@
|
||||
From 617564b04485223a313164cc6b6c7febad23f8ad Mon Sep 17 00:00:00 2001
|
||||
From: Phil Sutter <phil@nwl.cc>
|
||||
Date: Tue, 4 May 2021 16:03:24 +0200
|
||||
Subject: [PATCH] extensions: sctp: Fix nftables translation
|
||||
|
||||
If both sport and dport was present, incorrect nft syntax was generated.
|
||||
|
||||
Fixes: defc7bd2bac89 ("extensions: libxt_sctp: Add translation to nft")
|
||||
Signed-off-by: Phil Sutter <phil@nwl.cc>
|
||||
(cherry picked from commit a61282ec6a1697bfb40f19d13a28a74559050167)
|
||||
---
|
||||
extensions/libxt_sctp.c | 10 ++++------
|
||||
extensions/libxt_sctp.txlate | 10 +++++-----
|
||||
2 files changed, 9 insertions(+), 11 deletions(-)
|
||||
|
||||
diff --git a/extensions/libxt_sctp.c b/extensions/libxt_sctp.c
|
||||
index 140de2653b1ef..ee4e99ebf11bf 100644
|
||||
--- a/extensions/libxt_sctp.c
|
||||
+++ b/extensions/libxt_sctp.c
|
||||
@@ -495,15 +495,13 @@ static int sctp_xlate(struct xt_xlate *xl,
|
||||
if (!einfo->flags)
|
||||
return 0;
|
||||
|
||||
- xt_xlate_add(xl, "sctp ");
|
||||
-
|
||||
if (einfo->flags & XT_SCTP_SRC_PORTS) {
|
||||
if (einfo->spts[0] != einfo->spts[1])
|
||||
- xt_xlate_add(xl, "sport%s %u-%u",
|
||||
+ xt_xlate_add(xl, "sctp sport%s %u-%u",
|
||||
einfo->invflags & XT_SCTP_SRC_PORTS ? " !=" : "",
|
||||
einfo->spts[0], einfo->spts[1]);
|
||||
else
|
||||
- xt_xlate_add(xl, "sport%s %u",
|
||||
+ xt_xlate_add(xl, "sctp sport%s %u",
|
||||
einfo->invflags & XT_SCTP_SRC_PORTS ? " !=" : "",
|
||||
einfo->spts[0]);
|
||||
space = " ";
|
||||
@@ -511,11 +509,11 @@ static int sctp_xlate(struct xt_xlate *xl,
|
||||
|
||||
if (einfo->flags & XT_SCTP_DEST_PORTS) {
|
||||
if (einfo->dpts[0] != einfo->dpts[1])
|
||||
- xt_xlate_add(xl, "%sdport%s %u-%u", space,
|
||||
+ xt_xlate_add(xl, "%ssctp dport%s %u-%u", space,
|
||||
einfo->invflags & XT_SCTP_DEST_PORTS ? " !=" : "",
|
||||
einfo->dpts[0], einfo->dpts[1]);
|
||||
else
|
||||
- xt_xlate_add(xl, "%sdport%s %u", space,
|
||||
+ xt_xlate_add(xl, "%ssctp dport%s %u", space,
|
||||
einfo->invflags & XT_SCTP_DEST_PORTS ? " !=" : "",
|
||||
einfo->dpts[0]);
|
||||
}
|
||||
diff --git a/extensions/libxt_sctp.txlate b/extensions/libxt_sctp.txlate
|
||||
index 72f4641ab021c..0d6c59e183675 100644
|
||||
--- a/extensions/libxt_sctp.txlate
|
||||
+++ b/extensions/libxt_sctp.txlate
|
||||
@@ -23,16 +23,16 @@ iptables-translate -A INPUT -p sctp ! --dport 50:56 -j ACCEPT
|
||||
nft add rule ip filter INPUT sctp dport != 50-56 counter accept
|
||||
|
||||
iptables-translate -A INPUT -p sctp --dport 80 --sport 50 -j ACCEPT
|
||||
-nft add rule ip filter INPUT sctp sport 50 dport 80 counter accept
|
||||
+nft add rule ip filter INPUT sctp sport 50 sctp dport 80 counter accept
|
||||
|
||||
iptables-translate -A INPUT -p sctp --dport 80:100 --sport 50 -j ACCEPT
|
||||
-nft add rule ip filter INPUT sctp sport 50 dport 80-100 counter accept
|
||||
+nft add rule ip filter INPUT sctp sport 50 sctp dport 80-100 counter accept
|
||||
|
||||
iptables-translate -A INPUT -p sctp --dport 80 --sport 50:55 -j ACCEPT
|
||||
-nft add rule ip filter INPUT sctp sport 50-55 dport 80 counter accept
|
||||
+nft add rule ip filter INPUT sctp sport 50-55 sctp dport 80 counter accept
|
||||
|
||||
iptables-translate -A INPUT -p sctp ! --dport 80:100 --sport 50 -j ACCEPT
|
||||
-nft add rule ip filter INPUT sctp sport 50 dport != 80-100 counter accept
|
||||
+nft add rule ip filter INPUT sctp sport 50 sctp dport != 80-100 counter accept
|
||||
|
||||
iptables-translate -A INPUT -p sctp --dport 80 ! --sport 50:55 -j ACCEPT
|
||||
-nft add rule ip filter INPUT sctp sport != 50-55 dport 80 counter accept
|
||||
+nft add rule ip filter INPUT sctp sport != 50-55 sctp dport 80 counter accept
|
||||
--
|
||||
2.31.1
|
||||
|
@ -1,33 +0,0 @@
|
||||
From bdd9eb3bcce460815eecc39decf0cceb3fb0949b Mon Sep 17 00:00:00 2001
|
||||
From: Phil Sutter <phil@nwl.cc>
|
||||
Date: Fri, 13 Nov 2020 21:04:39 +0100
|
||||
Subject: [PATCH] libxtables: Drop leftover variable in
|
||||
xtables_numeric_to_ip6addr()
|
||||
|
||||
Variable 'err' was only used in removed debug code, so drop it as well.
|
||||
|
||||
Fixes: 7f526c9373c17 ("libxtables: xtables: remove unnecessary debug code")
|
||||
Signed-off-by: Phil Sutter <phil@nwl.cc>
|
||||
(cherry picked from commit 97fabae738a74bd04a7793e1199cd2b8a69122bc)
|
||||
---
|
||||
libxtables/xtables.c | 3 +--
|
||||
1 file changed, 1 insertion(+), 2 deletions(-)
|
||||
|
||||
diff --git a/libxtables/xtables.c b/libxtables/xtables.c
|
||||
index bc42ba8221f3a..6947441fec659 100644
|
||||
--- a/libxtables/xtables.c
|
||||
+++ b/libxtables/xtables.c
|
||||
@@ -1812,9 +1812,8 @@ const char *xtables_ip6mask_to_numeric(const struct in6_addr *addrp)
|
||||
struct in6_addr *xtables_numeric_to_ip6addr(const char *num)
|
||||
{
|
||||
static struct in6_addr ap;
|
||||
- int err;
|
||||
|
||||
- if ((err = inet_pton(AF_INET6, num, &ap)) == 1)
|
||||
+ if (inet_pton(AF_INET6, num, &ap) == 1)
|
||||
return ≈
|
||||
|
||||
return NULL;
|
||||
--
|
||||
2.31.1
|
||||
|
@ -1,49 +0,0 @@
|
||||
From 8724e4edb3630f17ddf1897172953f2dc97ef6a1 Mon Sep 17 00:00:00 2001
|
||||
From: Phil Sutter <phil@nwl.cc>
|
||||
Date: Fri, 13 Nov 2020 21:13:50 +0100
|
||||
Subject: [PATCH] extensions: libebt_ip6: Drop unused variables
|
||||
|
||||
They are being assigned to but never read.
|
||||
|
||||
Fixes: 5c8ce9c6aede0 ("ebtables-compat: add 'ip6' match extension")
|
||||
Signed-off-by: Phil Sutter <phil@nwl.cc>
|
||||
(cherry picked from commit 8bb5bcae57c83066c224efa5fd29ed4822a766fc)
|
||||
---
|
||||
extensions/libebt_ip6.c | 6 ++----
|
||||
1 file changed, 2 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/extensions/libebt_ip6.c b/extensions/libebt_ip6.c
|
||||
index b8a5a5d8c3a92..301bed9aadefd 100644
|
||||
--- a/extensions/libebt_ip6.c
|
||||
+++ b/extensions/libebt_ip6.c
|
||||
@@ -250,9 +250,8 @@ static void brip6_init(struct xt_entry_match *match)
|
||||
static struct in6_addr *numeric_to_addr(const char *num)
|
||||
{
|
||||
static struct in6_addr ap;
|
||||
- int err;
|
||||
|
||||
- if ((err=inet_pton(AF_INET6, num, &ap)) == 1)
|
||||
+ if (inet_pton(AF_INET6, num, &ap) == 1)
|
||||
return ≈
|
||||
return (struct in6_addr *)NULL;
|
||||
}
|
||||
@@ -292,7 +291,6 @@ static void ebt_parse_ip6_address(char *address, struct in6_addr *addr, struct i
|
||||
char buf[256];
|
||||
char *p;
|
||||
int i;
|
||||
- int err;
|
||||
|
||||
strncpy(buf, address, sizeof(buf) - 1);
|
||||
/* first the mask */
|
||||
@@ -309,7 +307,7 @@ static void ebt_parse_ip6_address(char *address, struct in6_addr *addr, struct i
|
||||
if (!memcmp(msk, &in6addr_any, sizeof(in6addr_any)))
|
||||
strcpy(buf, "::");
|
||||
|
||||
- if ((err=inet_pton(AF_INET6, buf, addr)) < 1) {
|
||||
+ if (inet_pton(AF_INET6, buf, addr) < 1) {
|
||||
xtables_error(PARAMETER_PROBLEM, "Invalid IPv6 Address '%s' specified", buf);
|
||||
return;
|
||||
}
|
||||
--
|
||||
2.31.1
|
||||
|
@ -1,29 +0,0 @@
|
||||
From 81e5a32b0369d44a3319b76395ef76950884ecce Mon Sep 17 00:00:00 2001
|
||||
From: Phil Sutter <phil@nwl.cc>
|
||||
Date: Wed, 2 Jun 2021 11:04:30 +0200
|
||||
Subject: [PATCH] libxtables: Fix memleak in xtopt_parse_hostmask()
|
||||
|
||||
The allocated hostmask duplicate needs to be freed again.
|
||||
|
||||
Fixes: 66266abd17adc ("libxtables: XTTYPE_HOSTMASK support")
|
||||
Signed-off-by: Phil Sutter <phil@nwl.cc>
|
||||
(cherry picked from commit ffe88f8f01263687e82ef4d3d2bdc0cb5444711e)
|
||||
---
|
||||
libxtables/xtoptions.c | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
diff --git a/libxtables/xtoptions.c b/libxtables/xtoptions.c
|
||||
index d329f2ff7979e..0dcdf607f4678 100644
|
||||
--- a/libxtables/xtoptions.c
|
||||
+++ b/libxtables/xtoptions.c
|
||||
@@ -763,6 +763,7 @@ static void xtopt_parse_hostmask(struct xt_option_call *cb)
|
||||
cb->arg = p;
|
||||
xtopt_parse_plenmask(cb);
|
||||
cb->arg = orig_arg;
|
||||
+ free(work);
|
||||
}
|
||||
|
||||
static void xtopt_parse_ethermac(struct xt_option_call *cb)
|
||||
--
|
||||
2.31.1
|
||||
|
@ -1,34 +0,0 @@
|
||||
From bf931f3213cc66f798a1a9966220816fd3259a2f Mon Sep 17 00:00:00 2001
|
||||
From: Phil Sutter <phil@nwl.cc>
|
||||
Date: Wed, 2 Jun 2021 11:55:20 +0200
|
||||
Subject: [PATCH] nft: Avoid memleak in error path of nft_cmd_new()
|
||||
|
||||
If rule allocation fails, free the allocated 'cmd' before returning to
|
||||
caller.
|
||||
|
||||
Fixes: a7f1e208cdf9c ("nft: split parsing from netlink commands")
|
||||
Signed-off-by: Phil Sutter <phil@nwl.cc>
|
||||
(cherry picked from commit eab75ed36a4f204ddab0c40ba42c5a300634d5c3)
|
||||
---
|
||||
iptables/nft-cmd.c | 4 +++-
|
||||
1 file changed, 3 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/iptables/nft-cmd.c b/iptables/nft-cmd.c
|
||||
index f2b935c57dab4..c3f6c14e0b99e 100644
|
||||
--- a/iptables/nft-cmd.c
|
||||
+++ b/iptables/nft-cmd.c
|
||||
@@ -35,8 +35,10 @@ struct nft_cmd *nft_cmd_new(struct nft_handle *h, int command,
|
||||
|
||||
if (state) {
|
||||
rule = nft_rule_new(h, chain, table, state);
|
||||
- if (!rule)
|
||||
+ if (!rule) {
|
||||
+ nft_cmd_free(cmd);
|
||||
return NULL;
|
||||
+ }
|
||||
|
||||
cmd->obj.rule = rule;
|
||||
|
||||
--
|
||||
2.31.1
|
||||
|
@ -1,29 +0,0 @@
|
||||
From fa0569c3d701d929393def1851421a4cacf251cc Mon Sep 17 00:00:00 2001
|
||||
From: Phil Sutter <phil@nwl.cc>
|
||||
Date: Wed, 2 Jun 2021 12:50:57 +0200
|
||||
Subject: [PATCH] iptables-apply: Drop unused variable
|
||||
|
||||
It was assigned to but never read.
|
||||
|
||||
Fixes: b45b4e3903414 ("iptables-apply: script and manpage update")
|
||||
Signed-off-by: Phil Sutter <phil@nwl.cc>
|
||||
(cherry picked from commit 084671d5acaaf749648e828c2ed3b319de651764)
|
||||
---
|
||||
iptables/iptables-apply | 1 -
|
||||
1 file changed, 1 deletion(-)
|
||||
|
||||
diff --git a/iptables/iptables-apply b/iptables/iptables-apply
|
||||
index 4683b1b402d08..3a7df5e3cbc1f 100755
|
||||
--- a/iptables/iptables-apply
|
||||
+++ b/iptables/iptables-apply
|
||||
@@ -231,7 +231,6 @@ case "$MODE" in
|
||||
"$RUNCMD" &
|
||||
CMD_PID=$!
|
||||
( sleep "$TIMEOUT"; kill "$CMD_PID" 2>/dev/null; exit 0 ) &
|
||||
- CMDTIMEOUT_PID=$!
|
||||
if ! wait "$CMD_PID"; then
|
||||
echo "failed."
|
||||
echo "Error: unknown error running command: $RUNCMD" >&2
|
||||
--
|
||||
2.31.1
|
||||
|
@ -1,211 +0,0 @@
|
||||
From b7582864a4cb71d4dcde752a3a2203c81159d6e2 Mon Sep 17 00:00:00 2001
|
||||
From: Phil Sutter <phil@nwl.cc>
|
||||
Date: Thu, 25 Mar 2021 16:24:39 +0100
|
||||
Subject: [PATCH] nft: cache: Sort chains on demand only
|
||||
|
||||
Mandatory sorted insert of chains into cache significantly slows down
|
||||
restoring of large rulesets. Since the sorted list of user-defined
|
||||
chains is needed for listing and verbose output only, introduce
|
||||
nft_cache_sort_chains() and call it where needed.
|
||||
|
||||
Signed-off-by: Phil Sutter <phil@nwl.cc>
|
||||
(cherry picked from commit fdf64dcdace989589bac441805082e3b1fe6a915)
|
||||
---
|
||||
iptables/nft-cache.c | 71 +++++++++++++++++++++++++++++++++--------
|
||||
iptables/nft-cache.h | 1 +
|
||||
iptables/nft.c | 12 +++++++
|
||||
iptables/nft.h | 1 +
|
||||
iptables/xtables-save.c | 1 +
|
||||
5 files changed, 73 insertions(+), 13 deletions(-)
|
||||
|
||||
diff --git a/iptables/nft-cache.c b/iptables/nft-cache.c
|
||||
index 6b6e6da40a826..8fbf9727826d8 100644
|
||||
--- a/iptables/nft-cache.c
|
||||
+++ b/iptables/nft-cache.c
|
||||
@@ -223,24 +223,67 @@ int nft_cache_add_chain(struct nft_handle *h, const struct builtin_table *t,
|
||||
|
||||
h->cache->table[t->type].base_chains[hooknum] = nc;
|
||||
} else {
|
||||
- struct nft_chain_list *clist = h->cache->table[t->type].chains;
|
||||
- struct list_head *pos = &clist->list;
|
||||
- struct nft_chain *cur;
|
||||
- const char *n;
|
||||
-
|
||||
- list_for_each_entry(cur, &clist->list, head) {
|
||||
- n = nftnl_chain_get_str(cur->nftnl, NFTNL_CHAIN_NAME);
|
||||
- if (strcmp(cname, n) <= 0) {
|
||||
- pos = &cur->head;
|
||||
- break;
|
||||
- }
|
||||
- }
|
||||
- list_add_tail(&nc->head, pos);
|
||||
+ list_add_tail(&nc->head,
|
||||
+ &h->cache->table[t->type].chains->list);
|
||||
}
|
||||
hlist_add_head(&nc->hnode, chain_name_hlist(h, t, cname));
|
||||
return 0;
|
||||
}
|
||||
|
||||
+static void __nft_chain_list_sort(struct list_head *list,
|
||||
+ int (*cmp)(struct nft_chain *a,
|
||||
+ struct nft_chain *b))
|
||||
+{
|
||||
+ struct nft_chain *pivot, *cur, *sav;
|
||||
+ LIST_HEAD(sublist);
|
||||
+
|
||||
+ if (list_empty(list))
|
||||
+ return;
|
||||
+
|
||||
+ /* grab first item as pivot (dividing) value */
|
||||
+ pivot = list_entry(list->next, struct nft_chain, head);
|
||||
+ list_del(&pivot->head);
|
||||
+
|
||||
+ /* move any smaller value into sublist */
|
||||
+ list_for_each_entry_safe(cur, sav, list, head) {
|
||||
+ if (cmp(pivot, cur) > 0) {
|
||||
+ list_del(&cur->head);
|
||||
+ list_add_tail(&cur->head, &sublist);
|
||||
+ }
|
||||
+ }
|
||||
+ /* conquer divided */
|
||||
+ __nft_chain_list_sort(&sublist, cmp);
|
||||
+ __nft_chain_list_sort(list, cmp);
|
||||
+
|
||||
+ /* merge divided and pivot again */
|
||||
+ list_add_tail(&pivot->head, &sublist);
|
||||
+ list_splice(&sublist, list);
|
||||
+}
|
||||
+
|
||||
+static int nft_chain_cmp_byname(struct nft_chain *a, struct nft_chain *b)
|
||||
+{
|
||||
+ const char *aname = nftnl_chain_get_str(a->nftnl, NFTNL_CHAIN_NAME);
|
||||
+ const char *bname = nftnl_chain_get_str(b->nftnl, NFTNL_CHAIN_NAME);
|
||||
+
|
||||
+ return strcmp(aname, bname);
|
||||
+}
|
||||
+
|
||||
+int nft_cache_sort_chains(struct nft_handle *h, const char *table)
|
||||
+{
|
||||
+ const struct builtin_table *t = nft_table_builtin_find(h, table);
|
||||
+
|
||||
+ if (!t)
|
||||
+ return -1;
|
||||
+
|
||||
+ if (h->cache->table[t->type].sorted)
|
||||
+ return 0;
|
||||
+
|
||||
+ __nft_chain_list_sort(&h->cache->table[t->type].chains->list,
|
||||
+ nft_chain_cmp_byname);
|
||||
+ h->cache->table[t->type].sorted = true;
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
struct nftnl_chain_list_cb_data {
|
||||
struct nft_handle *h;
|
||||
const struct builtin_table *t;
|
||||
@@ -663,6 +706,7 @@ static int flush_cache(struct nft_handle *h, struct nft_cache *c,
|
||||
|
||||
flush_base_chain_cache(c->table[table->type].base_chains);
|
||||
nft_chain_foreach(h, tablename, __flush_chain_cache, NULL);
|
||||
+ c->table[table->type].sorted = false;
|
||||
|
||||
if (c->table[table->type].sets)
|
||||
nftnl_set_list_foreach(c->table[table->type].sets,
|
||||
@@ -678,6 +722,7 @@ static int flush_cache(struct nft_handle *h, struct nft_cache *c,
|
||||
if (c->table[i].chains) {
|
||||
nft_chain_list_free(c->table[i].chains);
|
||||
c->table[i].chains = NULL;
|
||||
+ c->table[i].sorted = false;
|
||||
}
|
||||
|
||||
if (c->table[i].sets) {
|
||||
diff --git a/iptables/nft-cache.h b/iptables/nft-cache.h
|
||||
index 20d96beede876..58a015265056c 100644
|
||||
--- a/iptables/nft-cache.h
|
||||
+++ b/iptables/nft-cache.h
|
||||
@@ -16,6 +16,7 @@ int flush_rule_cache(struct nft_handle *h, const char *table,
|
||||
void nft_cache_build(struct nft_handle *h);
|
||||
int nft_cache_add_chain(struct nft_handle *h, const struct builtin_table *t,
|
||||
struct nftnl_chain *c);
|
||||
+int nft_cache_sort_chains(struct nft_handle *h, const char *table);
|
||||
|
||||
struct nft_chain *
|
||||
nft_chain_find(struct nft_handle *h, const char *table, const char *chain);
|
||||
diff --git a/iptables/nft.c b/iptables/nft.c
|
||||
index bde4ca72d3fcc..8b14daeaed610 100644
|
||||
--- a/iptables/nft.c
|
||||
+++ b/iptables/nft.c
|
||||
@@ -1754,6 +1754,8 @@ int nft_rule_flush(struct nft_handle *h, const char *chain, const char *table,
|
||||
return 1;
|
||||
}
|
||||
|
||||
+ nft_cache_sort_chains(h, table);
|
||||
+
|
||||
ret = nft_chain_foreach(h, table, nft_rule_flush_cb, &d);
|
||||
|
||||
/* the core expects 1 for success and 0 for error */
|
||||
@@ -1900,6 +1902,9 @@ int nft_chain_user_del(struct nft_handle *h, const char *chain,
|
||||
goto out;
|
||||
}
|
||||
|
||||
+ if (verbose)
|
||||
+ nft_cache_sort_chains(h, table);
|
||||
+
|
||||
ret = nft_chain_foreach(h, table, __nft_chain_user_del, &d);
|
||||
out:
|
||||
/* the core expects 1 for success and 0 for error */
|
||||
@@ -2437,6 +2442,8 @@ int nft_rule_list(struct nft_handle *h, const char *chain, const char *table,
|
||||
return 1;
|
||||
}
|
||||
|
||||
+ nft_cache_sort_chains(h, table);
|
||||
+
|
||||
if (ops->print_table_header)
|
||||
ops->print_table_header(table);
|
||||
|
||||
@@ -2540,6 +2547,8 @@ int nft_rule_list_save(struct nft_handle *h, const char *chain,
|
||||
return nft_rule_list_cb(c, &d);
|
||||
}
|
||||
|
||||
+ nft_cache_sort_chains(h, table);
|
||||
+
|
||||
/* Dump policies and custom chains first */
|
||||
nft_chain_foreach(h, table, nft_rule_list_chain_save, &counters);
|
||||
|
||||
@@ -3431,6 +3440,9 @@ int nft_chain_zero_counters(struct nft_handle *h, const char *chain,
|
||||
goto err;
|
||||
}
|
||||
|
||||
+ if (verbose)
|
||||
+ nft_cache_sort_chains(h, table);
|
||||
+
|
||||
ret = nft_chain_foreach(h, table, __nft_chain_zero_counters, &d);
|
||||
err:
|
||||
/* the core expects 1 for success and 0 for error */
|
||||
diff --git a/iptables/nft.h b/iptables/nft.h
|
||||
index 0910f82a2773c..4ac7e0099d567 100644
|
||||
--- a/iptables/nft.h
|
||||
+++ b/iptables/nft.h
|
||||
@@ -44,6 +44,7 @@ struct nft_cache {
|
||||
struct nft_chain_list *chains;
|
||||
struct nftnl_set_list *sets;
|
||||
bool exists;
|
||||
+ bool sorted;
|
||||
} table[NFT_TABLE_MAX];
|
||||
};
|
||||
|
||||
diff --git a/iptables/xtables-save.c b/iptables/xtables-save.c
|
||||
index d7901c650ea70..cfce0472f3ee8 100644
|
||||
--- a/iptables/xtables-save.c
|
||||
+++ b/iptables/xtables-save.c
|
||||
@@ -87,6 +87,7 @@ __do_output(struct nft_handle *h, const char *tablename, void *data)
|
||||
printf("*%s\n", tablename);
|
||||
/* Dump out chain names first,
|
||||
* thereby preventing dependency conflicts */
|
||||
+ nft_cache_sort_chains(h, tablename);
|
||||
nft_chain_foreach(h, tablename, nft_chain_save, h);
|
||||
nft_rule_save(h, tablename, d->format);
|
||||
if (d->commit)
|
||||
--
|
||||
2.31.1
|
||||
|
@ -1,56 +0,0 @@
|
||||
From 8086d05bb16e75a23b49bf1accef615193e726e6 Mon Sep 17 00:00:00 2001
|
||||
From: Phil Sutter <phil@nwl.cc>
|
||||
Date: Tue, 6 Apr 2021 10:51:20 +0200
|
||||
Subject: [PATCH] nft: Increase BATCH_PAGE_SIZE to support huge rulesets
|
||||
|
||||
In order to support the same ruleset sizes as legacy iptables, the
|
||||
kernel's limit of 1024 iovecs has to be overcome. Therefore increase
|
||||
each iovec's size from 128KB to 2MB.
|
||||
|
||||
While being at it, add a log message for failing sendmsg() call. This is
|
||||
not supposed to happen, even if the transaction fails. Yet if it does,
|
||||
users are left with only a "line XXX failed" message (with line number
|
||||
being the COMMIT line).
|
||||
|
||||
Signed-off-by: Phil Sutter <phil@nwl.cc>
|
||||
Signed-off-by: Florian Westphal <fw@strlen.de>
|
||||
(cherry picked from commit a3e81c62e8c5abb4158f1f66df6bbcffd1b33240)
|
||||
---
|
||||
iptables/nft.c | 12 +++++++-----
|
||||
1 file changed, 7 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git a/iptables/nft.c b/iptables/nft.c
|
||||
index 8b14daeaed610..f1deb82f87576 100644
|
||||
--- a/iptables/nft.c
|
||||
+++ b/iptables/nft.c
|
||||
@@ -88,11 +88,11 @@ int mnl_talk(struct nft_handle *h, struct nlmsghdr *nlh,
|
||||
|
||||
#define NFT_NLMSG_MAXSIZE (UINT16_MAX + getpagesize())
|
||||
|
||||
-/* selected batch page is 256 Kbytes long to load ruleset of
|
||||
- * half a million rules without hitting -EMSGSIZE due to large
|
||||
- * iovec.
|
||||
+/* Selected batch page is 2 Mbytes long to support loading a ruleset of 3.5M
|
||||
+ * rules matching on source and destination address as well as input and output
|
||||
+ * interfaces. This is what legacy iptables supports.
|
||||
*/
|
||||
-#define BATCH_PAGE_SIZE getpagesize() * 32
|
||||
+#define BATCH_PAGE_SIZE 2 * 1024 * 1024
|
||||
|
||||
static struct nftnl_batch *mnl_batch_init(void)
|
||||
{
|
||||
@@ -220,8 +220,10 @@ static int mnl_batch_talk(struct nft_handle *h, int numcmds)
|
||||
int err = 0;
|
||||
|
||||
ret = mnl_nft_socket_sendmsg(h, numcmds);
|
||||
- if (ret == -1)
|
||||
+ if (ret == -1) {
|
||||
+ fprintf(stderr, "sendmsg() failed: %s\n", strerror(errno));
|
||||
return -1;
|
||||
+ }
|
||||
|
||||
FD_ZERO(&readfds);
|
||||
FD_SET(fd, &readfds);
|
||||
--
|
||||
2.31.1
|
||||
|
@ -1,130 +0,0 @@
|
||||
From 172a84516d3311733cf2a11acc7a86203ad38156 Mon Sep 17 00:00:00 2001
|
||||
From: Phil Sutter <phil@nwl.cc>
|
||||
Date: Wed, 28 Jul 2021 17:53:53 +0200
|
||||
Subject: [PATCH] doc: ebtables-nft.8: Adjust for missing atomic-options
|
||||
|
||||
Drop any reference to them (and the environment variable) but list them
|
||||
in BUGS section hinting at ebtables-save and -restore tools.
|
||||
|
||||
Fixes: 1939cbc25e6f5 ("doc: Adjust ebtables man page")
|
||||
Signed-off-by: Phil Sutter <phil@nwl.cc>
|
||||
Acked-by: Pablo Neira Ayuso <pablo@netfilter.org>
|
||||
(cherry picked from commit 765bf04ecc228783cb88c810c85bc0c769579c39)
|
||||
---
|
||||
iptables/ebtables-nft.8 | 64 ++++++-----------------------------------
|
||||
1 file changed, 8 insertions(+), 56 deletions(-)
|
||||
|
||||
diff --git a/iptables/ebtables-nft.8 b/iptables/ebtables-nft.8
|
||||
index 1fa5ad9388cc0..08e9766f2cc74 100644
|
||||
--- a/iptables/ebtables-nft.8
|
||||
+++ b/iptables/ebtables-nft.8
|
||||
@@ -44,12 +44,6 @@ ebtables \- Ethernet bridge frame table administration (nft-based)
|
||||
.br
|
||||
.BR "ebtables " [ -t " table ] " --init-table
|
||||
.br
|
||||
-.BR "ebtables " [ -t " table ] [" --atomic-file " file] " --atomic-commit
|
||||
-.br
|
||||
-.BR "ebtables " [ -t " table ] [" --atomic-file " file] " --atomic-init
|
||||
-.br
|
||||
-.BR "ebtables " [ -t " table ] [" --atomic-file " file] " --atomic-save
|
||||
-.br
|
||||
|
||||
.SH DESCRIPTION
|
||||
.B ebtables
|
||||
@@ -149,11 +143,9 @@ a table, the commands apply to the default filter table.
|
||||
Only one command may be used on the command line at a time, except when
|
||||
the commands
|
||||
.BR -L " and " -Z
|
||||
-are combined, the commands
|
||||
+are combined or the commands
|
||||
.BR -N " and " -P
|
||||
-are combined, or when
|
||||
-.B --atomic-file
|
||||
-is used.
|
||||
+are combined.
|
||||
.TP
|
||||
.B "-A, --append"
|
||||
Append a rule to the end of the selected chain.
|
||||
@@ -313,39 +305,6 @@ of the ebtables kernel table.
|
||||
.TP
|
||||
.B "--init-table"
|
||||
Replace the current table data by the initial table data.
|
||||
-.TP
|
||||
-.B "--atomic-init"
|
||||
-Copy the kernel's initial data of the table to the specified
|
||||
-file. This can be used as the first action, after which rules are added
|
||||
-to the file. The file can be specified using the
|
||||
-.B --atomic-file
|
||||
-command or through the
|
||||
-.IR EBTABLES_ATOMIC_FILE " environment variable."
|
||||
-.TP
|
||||
-.B "--atomic-save"
|
||||
-Copy the kernel's current data of the table to the specified
|
||||
-file. This can be used as the first action, after which rules are added
|
||||
-to the file. The file can be specified using the
|
||||
-.B --atomic-file
|
||||
-command or through the
|
||||
-.IR EBTABLES_ATOMIC_FILE " environment variable."
|
||||
-.TP
|
||||
-.B "--atomic-commit"
|
||||
-Replace the kernel table data with the data contained in the specified
|
||||
-file. This is a useful command that allows you to load all your rules of a
|
||||
-certain table into the kernel at once, saving the kernel a lot of precious
|
||||
-time and allowing atomic updates of the tables. The file which contains
|
||||
-the table data is constructed by using either the
|
||||
-.B "--atomic-init"
|
||||
-or the
|
||||
-.B "--atomic-save"
|
||||
-command to generate a starting file. After that, using the
|
||||
-.B "--atomic-file"
|
||||
-command when constructing rules or setting the
|
||||
-.IR EBTABLES_ATOMIC_FILE " environment variable"
|
||||
-allows you to extend the file and build the complete table before
|
||||
-committing it to the kernel. This command can be very useful in boot scripts
|
||||
-to populate the ebtables tables in a fast way.
|
||||
.SS MISCELLANOUS COMMANDS
|
||||
.TP
|
||||
.B "-V, --version"
|
||||
@@ -371,16 +330,6 @@ a target extension (see
|
||||
.BR "TARGET EXTENSIONS" ")"
|
||||
or a user-defined chain name.
|
||||
.TP
|
||||
-.B --atomic-file "\fIfile\fP"
|
||||
-Let the command operate on the specified
|
||||
-.IR file .
|
||||
-The data of the table to
|
||||
-operate on will be extracted from the file and the result of the operation
|
||||
-will be saved back into the file. If specified, this option should come
|
||||
-before the command specification. An alternative that should be preferred,
|
||||
-is setting the
|
||||
-.IR EBTABLES_ATOMIC_FILE " environment variable."
|
||||
-.TP
|
||||
.B -M, --modprobe "\fIprogram\fP"
|
||||
When talking to the kernel, use this
|
||||
.I program
|
||||
@@ -1100,8 +1049,6 @@ arp message and the hardware address length in the arp header is 6 bytes.
|
||||
.br
|
||||
.SH FILES
|
||||
.I /etc/ethertypes
|
||||
-.SH ENVIRONMENT VARIABLES
|
||||
-.I EBTABLES_ATOMIC_FILE
|
||||
.SH MAILINGLISTS
|
||||
.BR "" "See " http://netfilter.org/mailinglists.html
|
||||
.SH BUGS
|
||||
@@ -1109,7 +1056,12 @@ The version of ebtables this man page ships with does not support the
|
||||
.B broute
|
||||
table. Also there is no support for
|
||||
.B string
|
||||
-match. And finally, this list is probably not complete.
|
||||
+match. Further, support for atomic-options
|
||||
+.RB ( --atomic-file ", " --atomic-init ", " --atomic-save ", " --atomic-commit )
|
||||
+has not been implemented, although
|
||||
+.BR ebtables-save " and " ebtables-restore
|
||||
+might replace them entirely given the inherent atomicity of nftables.
|
||||
+Finally, this list is probably not complete.
|
||||
.SH SEE ALSO
|
||||
.BR xtables-nft "(8), " iptables "(8), " ip (8)
|
||||
.PP
|
||||
--
|
||||
2.32.0
|
||||
|
@ -1,31 +0,0 @@
|
||||
From f3d74895be5847db13af403067c28385356376df Mon Sep 17 00:00:00 2001
|
||||
From: Phil Sutter <phil@nwl.cc>
|
||||
Date: Tue, 3 Aug 2021 10:55:20 +0200
|
||||
Subject: [PATCH] nft: Fix for non-verbose check command
|
||||
|
||||
Check command was unconditionally verbose since v1.8.5. Make it respect
|
||||
--verbose option again.
|
||||
|
||||
Fixes: a7f1e208cdf9c ("nft: split parsing from netlink commands")
|
||||
Signed-off-by: Phil Sutter <phil@nwl.cc>
|
||||
(cherry picked from commit 57d1422dbbc41c36ed2e9f6c67aa040c65a429a0)
|
||||
---
|
||||
iptables/nft.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/iptables/nft.c b/iptables/nft.c
|
||||
index f1deb82f87576..795dff8605404 100644
|
||||
--- a/iptables/nft.c
|
||||
+++ b/iptables/nft.c
|
||||
@@ -3126,7 +3126,7 @@ static int nft_prepare(struct nft_handle *h)
|
||||
case NFT_COMPAT_RULE_CHECK:
|
||||
assert_chain_exists(h, cmd->table, cmd->jumpto);
|
||||
ret = nft_rule_check(h, cmd->chain, cmd->table,
|
||||
- cmd->obj.rule, cmd->rulenum);
|
||||
+ cmd->obj.rule, cmd->verbose);
|
||||
break;
|
||||
case NFT_COMPAT_RULE_ZERO:
|
||||
ret = nft_rule_zero_counters(h, cmd->chain, cmd->table,
|
||||
--
|
||||
2.32.0
|
||||
|
@ -1,64 +0,0 @@
|
||||
From 3ffbffeb5193bf7259b04fcd2297a0d3e218b7a2 Mon Sep 17 00:00:00 2001
|
||||
From: Phil Sutter <phil@nwl.cc>
|
||||
Date: Fri, 11 Feb 2022 17:39:24 +0100
|
||||
Subject: [PATCH] libxtables: Register only the highest revision extension
|
||||
|
||||
When fully registering extensions, ignore all consecutive ones with same
|
||||
name and family value. Since commit b3ac87038f4e4 ("libxtables: Make
|
||||
sure extensions register in revision order"), one may safely assume the
|
||||
list of pending extensions has highest revision numbers first. Since
|
||||
iptables is only interested in the highest revision the kernel supports,
|
||||
registration and compatibility checks may be skipped once the first
|
||||
matching extension in pending list has validated.
|
||||
|
||||
Signed-off-by: Phil Sutter <phil@nwl.cc>
|
||||
(cherry picked from commit 2dbb49d15fb44ddd521a734eca3be3f940b7c1ba)
|
||||
---
|
||||
libxtables/xtables.c | 10 ++++++++--
|
||||
1 file changed, 8 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/libxtables/xtables.c b/libxtables/xtables.c
|
||||
index 6947441fec659..b0c969676bc85 100644
|
||||
--- a/libxtables/xtables.c
|
||||
+++ b/libxtables/xtables.c
|
||||
@@ -668,6 +668,7 @@ xtables_find_match(const char *name, enum xtables_tryload tryload,
|
||||
struct xtables_match **dptr;
|
||||
struct xtables_match *ptr;
|
||||
const char *icmp6 = "icmp6";
|
||||
+ bool found = false;
|
||||
|
||||
if (strlen(name) >= XT_EXTENSION_MAXNAMELEN)
|
||||
xtables_error(PARAMETER_PROBLEM,
|
||||
@@ -686,7 +687,9 @@ xtables_find_match(const char *name, enum xtables_tryload tryload,
|
||||
if (extension_cmp(name, (*dptr)->name, (*dptr)->family)) {
|
||||
ptr = *dptr;
|
||||
*dptr = (*dptr)->next;
|
||||
- if (xtables_fully_register_pending_match(ptr, prev)) {
|
||||
+ if (!found &&
|
||||
+ xtables_fully_register_pending_match(ptr, prev)) {
|
||||
+ found = true;
|
||||
prev = ptr;
|
||||
continue;
|
||||
} else if (prev) {
|
||||
@@ -788,6 +791,7 @@ xtables_find_target(const char *name, enum xtables_tryload tryload)
|
||||
struct xtables_target *prev = NULL;
|
||||
struct xtables_target **dptr;
|
||||
struct xtables_target *ptr;
|
||||
+ bool found = false;
|
||||
|
||||
/* Standard target? */
|
||||
if (strcmp(name, "") == 0
|
||||
@@ -802,7 +806,9 @@ xtables_find_target(const char *name, enum xtables_tryload tryload)
|
||||
if (extension_cmp(name, (*dptr)->name, (*dptr)->family)) {
|
||||
ptr = *dptr;
|
||||
*dptr = (*dptr)->next;
|
||||
- if (xtables_fully_register_pending_target(ptr, prev)) {
|
||||
+ if (!found &&
|
||||
+ xtables_fully_register_pending_target(ptr, prev)) {
|
||||
+ found = true;
|
||||
prev = ptr;
|
||||
continue;
|
||||
} else if (prev) {
|
||||
--
|
||||
2.34.1
|
||||
|
@ -1,134 +0,0 @@
|
||||
From eec7fd187a9eeda1250c1a35b32c92eff074dff6 Mon Sep 17 00:00:00 2001
|
||||
From: Phil Sutter <phil@nwl.cc>
|
||||
Date: Tue, 18 Jan 2022 22:39:08 +0100
|
||||
Subject: [PATCH] xshared: Fix response to unprivileged users
|
||||
|
||||
Expected behaviour in both variants is:
|
||||
|
||||
* Print help without error, append extension help if -m and/or -j
|
||||
options are present
|
||||
* Indicate lack of permissions in an error message for anything else
|
||||
|
||||
With iptables-nft, this was broken basically from day 1. Shared use of
|
||||
do_parse() then somewhat broke legacy: it started complaining about
|
||||
inability to create a lock file.
|
||||
|
||||
Fix this by making iptables-nft assume extension revision 0 is present
|
||||
if permissions don't allow to verify. This is consistent with legacy.
|
||||
|
||||
Second part is to exit directly after printing help - this avoids having
|
||||
to make the following code "nop-aware" to prevent privileged actions.
|
||||
|
||||
Signed-off-by: Phil Sutter <phil@nwl.cc>
|
||||
Reviewed-by: Florian Westphal <fw@strlen.de>
|
||||
(cherry picked from commit 26ecdf53960658771c0fc582f72a4025e2887f75)
|
||||
|
||||
Conflicts:
|
||||
iptables/xshared.c
|
||||
-> Apply direct exit from do_parse() to xtables.c, upstream merged
|
||||
do_parse() functions.
|
||||
---
|
||||
iptables/nft.c | 5 ++
|
||||
.../testcases/iptables/0008-unprivileged_0 | 60 +++++++++++++++++++
|
||||
iptables/xtables.c | 2 +-
|
||||
3 files changed, 66 insertions(+), 1 deletion(-)
|
||||
create mode 100755 iptables/tests/shell/testcases/iptables/0008-unprivileged_0
|
||||
|
||||
diff --git a/iptables/nft.c b/iptables/nft.c
|
||||
index 795dff8605404..5aa14aebeb31e 100644
|
||||
--- a/iptables/nft.c
|
||||
+++ b/iptables/nft.c
|
||||
@@ -3256,6 +3256,11 @@ int nft_compatible_revision(const char *name, uint8_t rev, int opt)
|
||||
err:
|
||||
mnl_socket_close(nl);
|
||||
|
||||
+ /* pretend revision 0 is valid if not permitted to check -
|
||||
+ * this is required for printing extension help texts as user */
|
||||
+ if (ret < 0 && errno == EPERM && rev == 0)
|
||||
+ return 1;
|
||||
+
|
||||
return ret < 0 ? 0 : 1;
|
||||
}
|
||||
|
||||
diff --git a/iptables/tests/shell/testcases/iptables/0008-unprivileged_0 b/iptables/tests/shell/testcases/iptables/0008-unprivileged_0
|
||||
new file mode 100755
|
||||
index 0000000000000..43e3bc8721dbd
|
||||
--- /dev/null
|
||||
+++ b/iptables/tests/shell/testcases/iptables/0008-unprivileged_0
|
||||
@@ -0,0 +1,60 @@
|
||||
+#!/bin/bash
|
||||
+
|
||||
+# iptables may print match/target specific help texts
|
||||
+# help output should work for unprivileged users
|
||||
+
|
||||
+run() {
|
||||
+ echo "running: $*" >&2
|
||||
+ runuser -u nobody -- "$@"
|
||||
+}
|
||||
+
|
||||
+grep_or_rc() {
|
||||
+ declare -g rc
|
||||
+ grep -q "$*" && return 0
|
||||
+ echo "missing in output: $*" >&2
|
||||
+ return 1
|
||||
+}
|
||||
+
|
||||
+out=$(run $XT_MULTI iptables --help)
|
||||
+let "rc+=$?"
|
||||
+grep_or_rc "iptables -h (print this help information)" <<< "$out"
|
||||
+let "rc+=$?"
|
||||
+
|
||||
+out=$(run $XT_MULTI iptables -m limit --help)
|
||||
+let "rc+=$?"
|
||||
+grep_or_rc "limit match options:" <<< "$out"
|
||||
+let "rc+=$?"
|
||||
+
|
||||
+out=$(run $XT_MULTI iptables -p tcp --help)
|
||||
+let "rc+=$?"
|
||||
+grep_or_rc "tcp match options:" <<< "$out"
|
||||
+let "rc+=$?"
|
||||
+
|
||||
+out=$(run $XT_MULTI iptables -j DNAT --help)
|
||||
+let "rc+=$?"
|
||||
+grep_or_rc "DNAT target options:" <<< "$out"
|
||||
+let "rc+=$?"
|
||||
+
|
||||
+out=$(run $XT_MULTI iptables -p tcp -j DNAT --help)
|
||||
+let "rc+=$?"
|
||||
+grep_or_rc "tcp match options:" <<< "$out"
|
||||
+let "rc+=$?"
|
||||
+out=$(run $XT_MULTI iptables -p tcp -j DNAT --help)
|
||||
+let "rc+=$?"
|
||||
+grep_or_rc "DNAT target options:" <<< "$out"
|
||||
+let "rc+=$?"
|
||||
+
|
||||
+
|
||||
+run $XT_MULTI iptables -L 2>&1 | \
|
||||
+ grep_or_rc "Permission denied"
|
||||
+let "rc+=$?"
|
||||
+
|
||||
+run $XT_MULTI iptables -A FORWARD -p tcp --dport 123 2>&1 | \
|
||||
+ grep_or_rc "Permission denied"
|
||||
+let "rc+=$?"
|
||||
+
|
||||
+run $XT_MULTI iptables -A FORWARD -j DNAT --to-destination 1.2.3.4 2>&1 | \
|
||||
+ grep_or_rc "Permission denied"
|
||||
+let "rc+=$?"
|
||||
+
|
||||
+exit $rc
|
||||
diff --git a/iptables/xtables.c b/iptables/xtables.c
|
||||
index 9779bd83d53b3..a16bba74dc578 100644
|
||||
--- a/iptables/xtables.c
|
||||
+++ b/iptables/xtables.c
|
||||
@@ -645,7 +645,7 @@ void do_parse(struct nft_handle *h, int argc, char *argv[],
|
||||
|
||||
printhelp(cs->matches);
|
||||
p->command = CMD_NONE;
|
||||
- return;
|
||||
+ exit(0);
|
||||
|
||||
/*
|
||||
* Option selection
|
||||
--
|
||||
2.34.1
|
||||
|
@ -1,84 +0,0 @@
|
||||
From 721af7dfbfd5dc18af86e00d30de108dbf1687fb Mon Sep 17 00:00:00 2001
|
||||
From: Phil Sutter <phil@nwl.cc>
|
||||
Date: Fri, 11 Feb 2022 17:47:22 +0100
|
||||
Subject: [PATCH] Improve error messages for unsupported extensions
|
||||
|
||||
If a given extension was not supported by the kernel, iptables would
|
||||
print a rather confusing error message if extension parameters were
|
||||
given:
|
||||
|
||||
| # rm /lib/modules/$(uname -r)/kernel/net/netfilter/xt_LOG.ko
|
||||
| # iptables -A FORWARD -j LOG --log-prefix foo
|
||||
| iptables v1.8.7 (legacy): unknown option "--log-prefix"
|
||||
|
||||
Avoid this by pretending extension revision 0 is always supported. It is
|
||||
the same hack as used to successfully print extension help texts as
|
||||
unprivileged user, extended to all error codes to serve privileged ones
|
||||
as well.
|
||||
|
||||
In addition, print a warning if kernel rejected revision 0 and it's not
|
||||
a permissions problem. This helps users find out which extension in a
|
||||
rule the kernel didn't like.
|
||||
|
||||
Finally, the above commands result in these messages:
|
||||
|
||||
| Warning: Extension LOG revision 0 not supported, missing kernel module?
|
||||
| iptables: No chain/target/match by that name.
|
||||
|
||||
Or, for iptables-nft:
|
||||
|
||||
| Warning: Extension LOG revision 0 not supported, missing kernel module?
|
||||
| iptables v1.8.7 (nf_tables): RULE_APPEND failed (No such file or directory): rule in chain FORWARD
|
||||
|
||||
Signed-off-by: Phil Sutter <phil@nwl.cc>
|
||||
(cherry picked from commit 17534cb18ed0a5052dc45c117401251359dba6aa)
|
||||
---
|
||||
iptables/nft.c | 12 +++++++++---
|
||||
libxtables/xtables.c | 7 ++++++-
|
||||
2 files changed, 15 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/iptables/nft.c b/iptables/nft.c
|
||||
index 5aa14aebeb31e..0b1759c3e35ea 100644
|
||||
--- a/iptables/nft.c
|
||||
+++ b/iptables/nft.c
|
||||
@@ -3256,10 +3256,16 @@ int nft_compatible_revision(const char *name, uint8_t rev, int opt)
|
||||
err:
|
||||
mnl_socket_close(nl);
|
||||
|
||||
- /* pretend revision 0 is valid if not permitted to check -
|
||||
- * this is required for printing extension help texts as user */
|
||||
- if (ret < 0 && errno == EPERM && rev == 0)
|
||||
+ /* pretend revision 0 is valid -
|
||||
+ * this is required for printing extension help texts as user, also
|
||||
+ * helps error messaging on unavailable kernel extension */
|
||||
+ if (ret < 0 && rev == 0) {
|
||||
+ if (errno != EPERM)
|
||||
+ fprintf(stderr,
|
||||
+ "Warning: Extension %s revision 0 not supported, missing kernel module?\n",
|
||||
+ name);
|
||||
return 1;
|
||||
+ }
|
||||
|
||||
return ret < 0 ? 0 : 1;
|
||||
}
|
||||
diff --git a/libxtables/xtables.c b/libxtables/xtables.c
|
||||
index b0c969676bc85..10b985b7c3a79 100644
|
||||
--- a/libxtables/xtables.c
|
||||
+++ b/libxtables/xtables.c
|
||||
@@ -929,7 +929,12 @@ int xtables_compatible_revision(const char *name, uint8_t revision, int opt)
|
||||
/* Definitely don't support this? */
|
||||
if (errno == ENOENT || errno == EPROTONOSUPPORT) {
|
||||
close(sockfd);
|
||||
- return 0;
|
||||
+ /* Pretend revision 0 support for better error messaging */
|
||||
+ if (revision == 0)
|
||||
+ fprintf(stderr,
|
||||
+ "Warning: Extension %s revision 0 not supported, missing kernel module?\n",
|
||||
+ name);
|
||||
+ return (revision == 0);
|
||||
} else if (errno == ENOPROTOOPT) {
|
||||
close(sockfd);
|
||||
/* Assume only revision 0 support (old kernel) */
|
||||
--
|
||||
2.34.1
|
||||
|
@ -10,8 +10,8 @@
|
||||
Name: iptables
|
||||
Summary: Tools for managing Linux kernel packet filtering capabilities
|
||||
URL: https://www.netfilter.org/projects/iptables
|
||||
Version: 1.8.7
|
||||
Release: 16%{?dist}
|
||||
Version: 1.8.8
|
||||
Release: 1%{?dist}
|
||||
Source: %{url}/files/%{name}-%{version}.tar.bz2
|
||||
Source1: iptables.init
|
||||
Source2: iptables-config
|
||||
@ -20,22 +20,7 @@ Source4: sysconfig_iptables
|
||||
Source5: sysconfig_ip6tables
|
||||
Source6: arptables-nft-helper
|
||||
|
||||
Patch01: 0001-ebtables-Exit-gracefully-on-invalid-table-names.patch
|
||||
Patch02: 0002-iptables-nft-fix-Z-option.patch
|
||||
Patch03: 0003-nft-Fix-bitwise-expression-avoidance-detection.patch
|
||||
Patch04: 0004-extensions-sctp-Fix-nftables-translation.patch
|
||||
Patch05: 0005-libxtables-Drop-leftover-variable-in-xtables_numeric.patch
|
||||
Patch06: 0006-extensions-libebt_ip6-Drop-unused-variables.patch
|
||||
Patch07: 0007-libxtables-Fix-memleak-in-xtopt_parse_hostmask.patch
|
||||
Patch08: 0008-nft-Avoid-memleak-in-error-path-of-nft_cmd_new.patch
|
||||
Patch09: 0009-iptables-apply-Drop-unused-variable.patch
|
||||
Patch10: 0010-nft-cache-Sort-chains-on-demand-only.patch
|
||||
Patch11: 0011-nft-Increase-BATCH_PAGE_SIZE-to-support-huge-ruleset.patch
|
||||
Patch12: 0012-doc-ebtables-nft.8-Adjust-for-missing-atomic-options.patch
|
||||
Patch13: 0013-nft-Fix-for-non-verbose-check-command.patch
|
||||
Patch14: 0014-libxtables-Register-only-the-highest-revision-extens.patch
|
||||
Patch15: 0015-xshared-Fix-response-to-unprivileged-users.patch
|
||||
Patch16: 0016-Improve-error-messages-for-unsupported-extensions.patch
|
||||
Patch01: 0001-xshared-Fix-build-for-Werror-format-security.patch
|
||||
|
||||
# pf.os: ISC license
|
||||
# iptables-apply: Artistic Licence 2.0
|
||||
@ -53,7 +38,7 @@ BuildRequires: bison
|
||||
BuildRequires: flex
|
||||
BuildRequires: gcc
|
||||
BuildRequires: pkgconfig(libmnl) >= 1.0
|
||||
BuildRequires: pkgconfig(libnftnl) >= 1.1.5
|
||||
BuildRequires: pkgconfig(libnftnl) >= 1.1.6
|
||||
# libpcap-devel for nfbpf_compile
|
||||
BuildRequires: libpcap-devel
|
||||
BuildRequires: autoconf
|
||||
@ -434,6 +419,9 @@ fi
|
||||
|
||||
|
||||
%changelog
|
||||
* Fri May 13 2022 Phil Sutter <psutter@redhat.com> - 1.8.8-1
|
||||
- Update to 1.8.8. Fixes rhbz#2085503
|
||||
|
||||
* Thu Mar 03 2022 Phil Sutter <psutter@redhat.com> - 1.8.7-16
|
||||
- Improve error messages for unsupported extensions
|
||||
- xshared: Fix response to unprivileged users
|
||||
|
2
sources
2
sources
@ -1 +1 @@
|
||||
SHA512 (iptables-1.8.7.tar.bz2) = c0a33fafbf1139157a9f52860938ebedc282a1394a68dcbd58981159379eb525919f999b25925f2cb4d6b18089bd99a94b00b3e73cff5cb0a0e47bdff174ed75
|
||||
SHA512 (iptables-1.8.8.tar.bz2) = f21df23279a77531a23f3fcb1b8f0f8ec0c726bda236dd0e33af74b06753baff6ce3f26fb9fcceb6fada560656ba901e68fc6452eb840ac1b206bc4654950f59
|
||||
|
Loading…
Reference in New Issue
Block a user