Files
kernel/include/linux
Florian Westphal 2a7851bffb netfilter: add nf_ipv6_ops hook to fix xt_addrtype with IPv6
Quoting https://bugzilla.netfilter.org/show_bug.cgi?id=812:

[ ip6tables -m addrtype ]
When I tried to use in the nat/PREROUTING it messes up the
routing cache even if the rule didn't matched at all.
[..]
If I remove the --limit-iface-in from the non-working scenario, so just
use the -m addrtype --dst-type LOCAL it works!

This happens when LOCAL type matching is requested with --limit-iface-in,
and the default ipv6 route is via the interface the packet we test
arrived on.

Because xt_addrtype uses ip6_route_output, the ipv6 routing implementation
creates an unwanted cached entry, and the packet won't make it to the
real/expected destination.

Silently ignoring --limit-iface-in makes the routing work but it breaks
rule matching (--dst-type LOCAL with limit-iface-in is supposed to only
match if the dst address is configured on the incoming interface;
without --limit-iface-in it will match if the address is reachable
via lo).

The test should call ipv6_chk_addr() instead.  However, this would add
a link-time dependency on ipv6.

There are two possible solutions:

1) Revert the commit that moved ipt_addrtype to xt_addrtype,
   and put ipv6 specific code into ip6t_addrtype.
2) add new "nf_ipv6_ops" struct to register pointers to ipv6 functions.

While the former might seem preferable, Pablo pointed out that there
are more xt modules with link-time dependeny issues regarding ipv6,
so lets go for 2).

Signed-off-by: Florian Westphal <fw@strlen.de>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
2013-05-23 11:58:55 +02:00
..
2013-05-17 14:31:05 -04:00
2013-05-07 19:46:02 -07:00
2013-04-29 15:40:23 -04:00
2013-03-23 16:11:31 -07:00
2013-05-07 20:16:25 -07:00
2013-03-22 15:18:18 -07:00
2013-04-08 17:39:23 +02:00
2013-05-10 14:37:17 +01:00
2013-05-01 16:36:22 +05:30
2013-03-28 10:10:25 -06:00
2013-05-07 18:38:27 -07:00
2013-04-29 18:28:40 -07:00
2013-05-01 16:28:48 -04:00
2013-05-07 02:16:31 -04:00
2013-05-06 13:07:33 +02:00
2013-04-12 00:03:42 -04:00
2013-04-30 17:04:06 -07:00
2013-05-07 16:09:00 -07:00
2013-04-01 11:04:50 -07:00
2013-04-30 17:04:00 -07:00
2013-04-29 18:28:44 -07:00
2013-05-04 14:47:26 -04:00
2013-04-29 15:54:28 -07:00
2013-04-29 15:54:28 -07:00
2013-04-12 10:26:23 +02:00
2013-04-09 14:13:29 -04:00
2013-03-29 15:31:30 -04:00
2013-04-30 15:50:12 +05:30
2013-03-21 11:47:51 -04:00
2013-03-22 16:19:59 -07:00
2013-03-20 12:10:38 -04:00
2013-03-28 11:10:22 -07:00
2013-04-29 15:54:37 -07:00
2013-05-07 18:38:28 -07:00