Blame SOURCES/0039-extensions-libipt_icmp-Fix-translation-of-type-any.patch

b144b7
From 6adcdca2aaf8cba6ee452c88f41ad8695bebdcfc Mon Sep 17 00:00:00 2001
b144b7
From: Phil Sutter <phil@nwl.cc>
b144b7
Date: Tue, 6 Oct 2020 19:07:19 +0200
b144b7
Subject: [PATCH] extensions: libipt_icmp: Fix translation of type 'any'
b144b7
b144b7
By itself, '-m icmp --icmp-type any' is a noop, it matches any icmp
b144b7
types. Yet nft_ipv4_xlate() does not emit an 'ip protocol' match if
b144b7
there's an extension with same name present in the rule. Luckily, legacy
b144b7
iptables demands icmp match to be prepended by '-p icmp', so we can
b144b7
assume this is present and just emit the 'ip protocol' match from icmp
b144b7
xlate callback.
b144b7
b144b7
Fixes: aa158ca0fda65 ("extensions: libipt_icmp: Add translation to nft")
b144b7
Signed-off-by: Phil Sutter <phil@nwl.cc>
b144b7
Reviewed-by: Florian Westphal <fw@strlen.de>
b144b7
(cherry picked from commit ad4b17b98bbedf93d2182a4dc9a37e9cf3adfe1b)
b144b7
Signed-off-by: Phil Sutter <psutter@redhat.com>
b144b7
---
b144b7
 extensions/libipt_icmp.c      | 5 +++++
b144b7
 extensions/libipt_icmp.txlate | 3 +++
b144b7
 2 files changed, 8 insertions(+)
b144b7
b144b7
diff --git a/extensions/libipt_icmp.c b/extensions/libipt_icmp.c
b144b7
index e76257c54708c..e5e236613f39f 100644
b144b7
--- a/extensions/libipt_icmp.c
b144b7
+++ b/extensions/libipt_icmp.c
b144b7
@@ -256,6 +256,11 @@ static int icmp_xlate(struct xt_xlate *xl,
b144b7
 		if (!type_xlate_print(xl, info->type, info->code[0],
b144b7
 				      info->code[1]))
b144b7
 			return 0;
b144b7
+	} else {
b144b7
+		/* '-m icmp --icmp-type any' is a noop by itself,
b144b7
+		 * but it eats a (mandatory) previous '-p icmp' so
b144b7
+		 * emit it here */
b144b7
+		xt_xlate_add(xl, "ip protocol icmp");
b144b7
 	}
b144b7
 	return 1;
b144b7
 }
b144b7
diff --git a/extensions/libipt_icmp.txlate b/extensions/libipt_icmp.txlate
b144b7
index 434f8cc4eb1ae..a2aec8e26df75 100644
b144b7
--- a/extensions/libipt_icmp.txlate
b144b7
+++ b/extensions/libipt_icmp.txlate
b144b7
@@ -6,3 +6,6 @@ nft add rule ip filter INPUT icmp type destination-unreachable counter accept
b144b7
 
b144b7
 iptables-translate -t filter -A INPUT -m icmp ! --icmp-type 3 -j ACCEPT
b144b7
 nft add rule ip filter INPUT icmp type != destination-unreachable counter accept
b144b7
+
b144b7
+iptables-translate -t filter -A INPUT -m icmp --icmp-type any -j ACCEPT
b144b7
+nft add rule ip filter INPUT ip protocol icmp counter accept
b144b7
-- 
b144b7
2.28.0
b144b7