diff mbox series

[iptables,v2,17/17] nft: Store maximum allowed chain name length in family ops

Message ID 20210930140419.6170-18-phil@nwl.cc
State Changes Requested
Delegated to: Pablo Neira
Headers show
Series Eliminate dedicated arptables-nft parser | expand

Commit Message

Phil Sutter Sept. 30, 2021, 2:04 p.m. UTC
arptables accepts chain names of at max 30chars while ip(6)tables only
accepts up to 29chars. To retain the old behaviour, store the value in
nft_family_ops.

Signed-off-by: Phil Sutter <phil@nwl.cc>
---
 iptables/nft-arp.c    | 1 +
 iptables/nft-ipv4.c   | 1 +
 iptables/nft-ipv6.c   | 1 +
 iptables/nft-shared.h | 1 +
 iptables/xtables.c    | 6 +++---
 5 files changed, 7 insertions(+), 3 deletions(-)
diff mbox series

Patch

diff --git a/iptables/nft-arp.c b/iptables/nft-arp.c
index 32eb91add4f1e..de3c7028818ab 100644
--- a/iptables/nft-arp.c
+++ b/iptables/nft-arp.c
@@ -811,4 +811,5 @@  struct nft_family_ops nft_family_ops_arp = {
 	.delete_entry		= nft_arp_delete_entry,
 	.check_entry		= nft_arp_check_entry,
 	.replace_entry		= nft_arp_replace_entry,
+	.chain_maxnamelen	= ARPT_FUNCTION_MAXNAMELEN,
 };
diff --git a/iptables/nft-ipv4.c b/iptables/nft-ipv4.c
index febd7673af4f8..85ab0fe559dfd 100644
--- a/iptables/nft-ipv4.c
+++ b/iptables/nft-ipv4.c
@@ -577,4 +577,5 @@  struct nft_family_ops nft_family_ops_ipv4 = {
 	.delete_entry		= nft_ipv4_delete_entry,
 	.check_entry		= nft_ipv4_check_entry,
 	.replace_entry		= nft_ipv4_replace_entry,
+	.chain_maxnamelen	= XT_EXTENSION_MAXNAMELEN,
 };
diff --git a/iptables/nft-ipv6.c b/iptables/nft-ipv6.c
index f0e64bbd4ab23..48bcef6a1823a 100644
--- a/iptables/nft-ipv6.c
+++ b/iptables/nft-ipv6.c
@@ -530,4 +530,5 @@  struct nft_family_ops nft_family_ops_ipv6 = {
 	.delete_entry		= nft_ipv6_delete_entry,
 	.check_entry		= nft_ipv6_check_entry,
 	.replace_entry		= nft_ipv6_replace_entry,
+	.chain_maxnamelen	= XT_EXTENSION_MAXNAMELEN,
 };
diff --git a/iptables/nft-shared.h b/iptables/nft-shared.h
index 339c46e7f5b06..75597a0f609e8 100644
--- a/iptables/nft-shared.h
+++ b/iptables/nft-shared.h
@@ -129,6 +129,7 @@  struct nft_family_ops {
 			     struct iptables_command_state *cs,
 			     struct xtables_args *args, bool verbose,
 			     int rulenum);
+	size_t chain_maxnamelen;
 };
 
 void add_meta(struct nftnl_rule *r, uint32_t key);
diff --git a/iptables/xtables.c b/iptables/xtables.c
index dba497b85064a..c6c7cbddbd3a3 100644
--- a/iptables/xtables.c
+++ b/iptables/xtables.c
@@ -788,10 +788,10 @@  void do_parse(struct nft_handle *h, int argc, char *argv[],
 
 	generic_opt_check(p->command, cs->options);
 
-	if (p->chain != NULL && strlen(p->chain) >= XT_EXTENSION_MAXNAMELEN)
+	if (p->chain != NULL && strlen(p->chain) >= h->ops->chain_maxnamelen)
 		xtables_error(PARAMETER_PROBLEM,
-			   "chain name `%s' too long (must be under %u chars)",
-			   p->chain, XT_EXTENSION_MAXNAMELEN);
+			   "chain name `%s' too long (must be under %zu chars)",
+			   p->chain, h->ops->chain_maxnamelen);
 
 	if (p->command == CMD_APPEND ||
 	    p->command == CMD_DELETE ||