* [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
[parent not found: <200607040030.k640U4e5004273@toshiba.co.jp>]
* 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
[parent not found: <200607040426.k644QCpQ026660@toshiba.co.jp>]
* 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.