All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] icmpv6 match --icmpv6-type confusion
@ 2006-06-30 20:18 Phil Oester
  2006-07-03 17:52 ` Patrick McHardy
  0 siblings, 1 reply; 6+ messages in thread
From: Phil Oester @ 2006-06-30 20:18 UTC (permalink / raw)
  To: netfilter-devel

[-- Attachment #1: Type: text/plain, Size: 548 bytes --]

Adding a rule such as this:

-A INPUT -p ipv6-icmp -m icmpv6

ends up creating a rule with "ipv6-icmp type 0", instead of "ipv6-icmp type any"
which is what was expected.  Granted, the match is redundant anyway, but it
should not assume a specific type when one is not specified.

Below patches (to both kernel and userspace) fix this, and resolve bug #461.
In keeping with icmpv4, 0xFF is used to designate "any". And since I was
looking at it, I fixed up a 255 -> any in icmpv4 printing.

Phil

Signed-off-by: Phil Oester <kernel@linuxace.com>



[-- Attachment #2: patch-icmpv6-kernel --]
[-- Type: text/plain, Size: 427 bytes --]

--- linux-std/net/ipv6/netfilter/ip6_tables.c	2006-06-17 21:49:35.000000000 -0400
+++ linux-po/net/ipv6/netfilter/ip6_tables.c	2006-06-29 23:05:09.000000000 -0400
@@ -1308,7 +1308,7 @@
 		     u_int8_t type, u_int8_t code,
 		     int invert)
 {
-	return (type == test_type && code >= min_code && code <= max_code)
+	return ((test_type == 0xFF) || (type == test_type && code >= min_code && code <= max_code))
 		^ invert;
 }
 

[-- Attachment #3: patch-icmpv6-user --]
[-- Type: text/plain, Size: 1557 bytes --]

diff -ru ipt-orig/extensions/libip6t_icmp6.c ipt-new/extensions/libip6t_icmp6.c
--- ipt-orig/extensions/libip6t_icmp6.c	2006-04-14 20:05:41.000000000 -0700
+++ ipt-new/extensions/libip6t_icmp6.c	2006-06-29 18:07:19.000000000 -0700
@@ -149,6 +149,7 @@
 {
 	struct ip6t_icmp *icmpv6info = (struct ip6t_icmp *)m->data;
 
+	icmpv6info->type = 0xFF;
 	icmpv6info->code[1] = 0xFF;
 }
 
@@ -206,7 +207,12 @@
 	if (invert)
 		printf("!");
 
-	printf("type %u", type);
+	/* special hack for 'any' case */
+	if (type == 0xFF)
+		printf("type any ");
+	else
+		printf("type %u", type);
+
 	if (code_min == 0 && code_max == 0xFF)
 		printf(" ");
 	else if (code_min == code_max)
@@ -241,7 +247,12 @@
 	if (icmpv6->invflags & IP6T_ICMP_INV)
 		printf("! ");
 
-	printf("--icmpv6-type %u", icmpv6->type);
+	/* special hack for 'any' case */
+	if (icmpv6->type == 0xFF)
+		printf("--icmpv6-type any ");
+	else
+		printf("--icmpv6-type %u", icmpv6->type);
+
 	if (icmpv6->code[0] != 0 || icmpv6->code[1] != 0xFF)
 		printf("/%u", icmpv6->code[0]);
 	printf(" ");
diff -ru ipt-orig/extensions/libipt_icmp.c ipt-new/extensions/libipt_icmp.c
--- ipt-orig/extensions/libipt_icmp.c	2005-02-14 05:13:04.000000000 -0800
+++ ipt-new/extensions/libipt_icmp.c	2006-06-29 17:57:47.000000000 -0700
@@ -231,7 +231,12 @@
 	if (invert)
 		printf("!");
 
-	printf("type %u", type);
+	/* special hack for 'any' case */
+	if (type == 0xFF)
+		printf("type any ");
+	else
+		printf("type %u", type);
+
 	if (code_min == 0 && code_max == 0xFF)
 		printf(" ");
 	else if (code_min == code_max)

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH] icmpv6 match --icmpv6-type confusion
  2006-06-30 20:18 [PATCH] icmpv6 match --icmpv6-type confusion Phil Oester
@ 2006-07-03 17:52 ` Patrick McHardy
  2006-07-04  0:30   ` Yasuyuki KOZAKAI
       [not found]   ` <200607040030.k640U4e5004273@toshiba.co.jp>
  0 siblings, 2 replies; 6+ messages in thread
From: Patrick McHardy @ 2006-07-03 17:52 UTC (permalink / raw)
  To: Phil Oester; +Cc: netfilter-devel, Yasuyuki Kozakai

Phil Oester wrote:
> Adding a rule such as this:
> 
> -A INPUT -p ipv6-icmp -m icmpv6
> 
> ends up creating a rule with "ipv6-icmp type 0", instead of "ipv6-icmp type any"
> which is what was expected.  Granted, the match is redundant anyway, but it
> should not assume a specific type when one is not specified.
> 
> Below patches (to both kernel and userspace) fix this, and resolve bug #461.
> In keeping with icmpv4, 0xFF is used to designate "any". And since I was
> looking at it, I fixed up a 255 -> any in icmpv4 printing.

Thanks Phil. I have to admit that I never liked the ugly 255 hack,
its a perfectly valid value for the type field to use, even though
its currently not defined for IPv4 or IPv6. For IPv6 I even have
some concerns that it will stay unused for all times, the stategy
for choosing new values seems to be different from IPv4. I guess
an alternative would be to introduce a new revision.

Yasuyuki, do you have an opinion on this?

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH] icmpv6 match --icmpv6-type confusion
  2006-07-03 17:52 ` Patrick McHardy
@ 2006-07-04  0:30   ` Yasuyuki KOZAKAI
       [not found]   ` <200607040030.k640U4e5004273@toshiba.co.jp>
  1 sibling, 0 replies; 6+ messages in thread
From: Yasuyuki KOZAKAI @ 2006-07-04  0:30 UTC (permalink / raw)
  To: kaber; +Cc: kernel, netfilter-devel, yasuyuki.kozakai

From: Patrick McHardy <kaber@trash.net>
Subject: Re: [PATCH] icmpv6 match --icmpv6-type confusion
Date: Mon, 03 Jul 2006 19:52:23 +0200

> Phil Oester wrote:
> > Adding a rule such as this:
> > 
> > -A INPUT -p ipv6-icmp -m icmpv6
> > 
> > ends up creating a rule with "ipv6-icmp type 0", instead of "ipv6-icmp type any"
> > which is what was expected.  Granted, the match is redundant anyway, but it
> > should not assume a specific type when one is not specified.
> > 
> > Below patches (to both kernel and userspace) fix this, and resolve bug #461.
> > In keeping with icmpv4, 0xFF is used to designate "any". And since I was
> > looking at it, I fixed up a 255 -> any in icmpv4 printing.
> 
> Thanks Phil. I have to admit that I never liked the ugly 255 hack,
> its a perfectly valid value for the type field to use, even though
> its currently not defined for IPv4 or IPv6. For IPv6 I even have
> some concerns that it will stay unused for all times, the stategy
> for choosing new values seems to be different from IPv4. I guess
> an alternative would be to introduce a new revision.
> 
> Yasuyuki, do you have an opinion on this?

It sounds good to me to introduce a new revision and a new value to support
"icmpv6-type any". But can we really break behavior compatibility of
"-p ipv6-icmp -m icmpv6" ?

-- Yasuyuki Kozakai

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH] icmpv6 match --icmpv6-type confusion
       [not found]   ` <200607040030.k640U4e5004273@toshiba.co.jp>
@ 2006-07-04  0:46     ` Patrick McHardy
  2006-07-04  4:26       ` Yasuyuki KOZAKAI
       [not found]       ` <200607040426.k644QCpQ026660@toshiba.co.jp>
  0 siblings, 2 replies; 6+ messages in thread
From: Patrick McHardy @ 2006-07-04  0:46 UTC (permalink / raw)
  To: Yasuyuki KOZAKAI; +Cc: kernel, netfilter-devel

Yasuyuki KOZAKAI wrote:
> From: Patrick McHardy <kaber@trash.net>
> Subject: Re: [PATCH] icmpv6 match --icmpv6-type confusion
> Date: Mon, 03 Jul 2006 19:52:23 +0200
>>Phil Oester wrote:
>>
>>>Adding a rule such as this:
>>>
>>>-A INPUT -p ipv6-icmp -m icmpv6
>>>
>>>ends up creating a rule with "ipv6-icmp type 0", instead of "ipv6-icmp type any"
>>>which is what was expected.  Granted, the match is redundant anyway, but it
>>>should not assume a specific type when one is not specified.
>>>
>>>Below patches (to both kernel and userspace) fix this, and resolve bug #461.
>>>In keeping with icmpv4, 0xFF is used to designate "any". And since I was
>>>looking at it, I fixed up a 255 -> any in icmpv4 printing.
>>
>>Thanks Phil. I have to admit that I never liked the ugly 255 hack,
>>its a perfectly valid value for the type field to use, even though
>>its currently not defined for IPv4 or IPv6. For IPv6 I even have
>>some concerns that it will stay unused for all times, the stategy
>>for choosing new values seems to be different from IPv4. I guess
>>an alternative would be to introduce a new revision.
>>
>>Yasuyuki, do you have an opinion on this?
> 
> 
> It sounds good to me to introduce a new revision and a new value to support
> "icmpv6-type any". But can we really break behavior compatibility of
> "-p ipv6-icmp -m icmpv6" ?


I tend to agree with Phil's interpretation that this is actually
unexpected behaviour, so I don't think anyone is doing this
intentional. I would expect either a parser error or type any.

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH] icmpv6 match --icmpv6-type confusion
  2006-07-04  0:46     ` Patrick McHardy
@ 2006-07-04  4:26       ` Yasuyuki KOZAKAI
       [not found]       ` <200607040426.k644QCpQ026660@toshiba.co.jp>
  1 sibling, 0 replies; 6+ messages in thread
From: Yasuyuki KOZAKAI @ 2006-07-04  4:26 UTC (permalink / raw)
  To: kaber; +Cc: kernel, netfilter-devel, yasuyuki.kozakai

[-- Attachment #1: Type: Text/Plain, Size: 1954 bytes --]

From: Patrick McHardy <kaber@trash.net>
Date: Tue, 04 Jul 2006 02:46:41 +0200

> Yasuyuki KOZAKAI wrote:
> > From: Patrick McHardy <kaber@trash.net>
> > Subject: Re: [PATCH] icmpv6 match --icmpv6-type confusion
> > Date: Mon, 03 Jul 2006 19:52:23 +0200
> >>Phil Oester wrote:
> >>
> >>>Adding a rule such as this:
> >>>
> >>>-A INPUT -p ipv6-icmp -m icmpv6
> >>>
> >>>ends up creating a rule with "ipv6-icmp type 0", instead of "ipv6-icmp type any"
> >>>which is what was expected.  Granted, the match is redundant anyway, but it
> >>>should not assume a specific type when one is not specified.
> >>>
> >>>Below patches (to both kernel and userspace) fix this, and resolve bug #461.
> >>>In keeping with icmpv4, 0xFF is used to designate "any". And since I was
> >>>looking at it, I fixed up a 255 -> any in icmpv4 printing.
> >>
> >>Thanks Phil. I have to admit that I never liked the ugly 255 hack,
> >>its a perfectly valid value for the type field to use, even though
> >>its currently not defined for IPv4 or IPv6. For IPv6 I even have
> >>some concerns that it will stay unused for all times, the stategy
> >>for choosing new values seems to be different from IPv4. I guess
> >>an alternative would be to introduce a new revision.
> >>
> >>Yasuyuki, do you have an opinion on this?
> > 
> > 
> > It sounds good to me to introduce a new revision and a new value to support
> > "icmpv6-type any". But can we really break behavior compatibility of
> > "-p ipv6-icmp -m icmpv6" ?
> 
> 
> I tend to agree with Phil's interpretation that this is actually
> unexpected behaviour, so I don't think anyone is doing this
> intentional. I would expect either a parser error or type any.

parser error is good idea. It's not neccesary for icmpv6 match to support
"--icmpv6-type any" because people can get same behavior with only
"-p ipv6-icmp".

How about the attached patch ? That also fixes allowing double
--icmp-type/--icmpv6-type.

-- Yasuyuki Kozakai


[-- Attachment #2: icmp.patch --]
[-- Type: Text/Plain, Size: 1472 bytes --]

diff --git a/extensions/libip6t_icmp6.c b/extensions/libip6t_icmp6.c
index a29bb38..6940d0e 100644
--- a/extensions/libip6t_icmp6.c
+++ b/extensions/libip6t_icmp6.c
@@ -164,11 +164,15 @@ parse(int c, char **argv, int invert, un
 
 	switch (c) {
 	case '1':
+		if (*flags == 1)
+			exit_error(PARAMETER_PROBLEM,
+				   "icmpv6 match: only use --icmpv6-type once!");
 		check_inverse(optarg, &invert, &optind, 0);
 		parse_icmpv6(argv[optind-1], &icmpv6info->type, 
 			     icmpv6info->code);
 		if (invert)
 			icmpv6info->invflags |= IP6T_ICMP_INV;
+		*flags = 1;
 		break;
 
 	default:
@@ -247,9 +251,11 @@ static void save(const struct ip6t_ip6 *
 	printf(" ");
 }
 
-/* Final check; we don't care. */
 static void final_check(unsigned int flags)
 {
+	if (!flags)
+		exit_error(PARAMETER_PROBLEM,
+			   "icmpv6 match: You must specify `--icmpv6-type'");
 }
 
 static struct ip6tables_match icmpv6 = {
diff --git a/extensions/libipt_icmp.c b/extensions/libipt_icmp.c
index 9d45c8c..8f22d05 100644
--- a/extensions/libipt_icmp.c
+++ b/extensions/libipt_icmp.c
@@ -189,11 +189,15 @@ parse(int c, char **argv, int invert, un
 
 	switch (c) {
 	case '1':
+		if (*flags == 1)
+			exit_error(PARAMETER_PROBLEM,
+				   "icmp match: only use --icmp-type once!");
 		check_inverse(optarg, &invert, &optind, 0);
 		parse_icmp(argv[optind-1], &icmpinfo->type, 
 			   icmpinfo->code);
 		if (invert)
 			icmpinfo->invflags |= IPT_ICMP_INV;
+		*flags = 1;
 		break;
 
 	default:

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: [PATCH] icmpv6 match --icmpv6-type confusion
       [not found]       ` <200607040426.k644QCpQ026660@toshiba.co.jp>
@ 2006-07-04  8:21         ` Patrick McHardy
  0 siblings, 0 replies; 6+ messages in thread
From: Patrick McHardy @ 2006-07-04  8:21 UTC (permalink / raw)
  To: Yasuyuki KOZAKAI; +Cc: kernel, netfilter-devel

Yasuyuki KOZAKAI wrote:
> From: Patrick McHardy <kaber@trash.net>
> Date: Tue, 04 Jul 2006 02:46:41 +0200
> 
>>I tend to agree with Phil's interpretation that this is actually
>>unexpected behaviour, so I don't think anyone is doing this
>>intentional. I would expect either a parser error or type any.
> 
> 
> parser error is good idea. It's not neccesary for icmpv6 match to support
> "--icmpv6-type any" because people can get same behavior with only
> "-p ipv6-icmp".

Agreed. Too bad we already have this hack in the kernel for IPv4.

> How about the attached patch ? That also fixes allowing double
> --icmp-type/--icmpv6-type.

Looks good to me.

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2006-07-04  8:21 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2006-06-30 20:18 [PATCH] icmpv6 match --icmpv6-type confusion Phil Oester
2006-07-03 17:52 ` Patrick McHardy
2006-07-04  0:30   ` Yasuyuki KOZAKAI
     [not found]   ` <200607040030.k640U4e5004273@toshiba.co.jp>
2006-07-04  0:46     ` Patrick McHardy
2006-07-04  4:26       ` Yasuyuki KOZAKAI
     [not found]       ` <200607040426.k644QCpQ026660@toshiba.co.jp>
2006-07-04  8:21         ` Patrick McHardy

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.