diff options
author | Juha-Matti Tapio <jmtapio@verkkotelakka.net> | 2008-02-28 20:55:46 -0800 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2008-02-28 20:55:46 -0800 |
commit | 99cd07a537bf4c7c954f31611e30064407104410 (patch) | |
tree | 4abc67b2f95b3220bfa467cb9c85156cd17e3ab7 /net/ipv6/addrconf.c | |
parent | 5fe47b8a65f8b4104e41dc46092dfcf942ce0758 (diff) | |
download | talos-op-linux-99cd07a537bf4c7c954f31611e30064407104410.tar.gz talos-op-linux-99cd07a537bf4c7c954f31611e30064407104410.zip |
[IPV6]: Fix source address selection for ORCHID addresses
Skip the prefix length matching in source address selection for
orchid -> non-orchid addresses.
Overlay Routable Cryptographic Hash IDentifiers (RFC 4843,
2001:10::/28) are currenty not globally reachable. Without this
check a host with an ORCHID address can end up preferring those over
regular addresses when talking to other regular hosts in the 2001::/16
range thus breaking non-orchid connections.
Signed-off-by: Juha-Matti Tapio <jmtapio@verkkotelakka.net>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/ipv6/addrconf.c')
-rw-r--r-- | net/ipv6/addrconf.c | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/net/ipv6/addrconf.c b/net/ipv6/addrconf.c index 101e0e70ba27..18e3a9825d81 100644 --- a/net/ipv6/addrconf.c +++ b/net/ipv6/addrconf.c @@ -1125,6 +1125,11 @@ int ipv6_dev_get_saddr(struct net_device *daddr_dev, if (hiscore.rule < 7) hiscore.rule++; #endif + + /* Skip rule 8 for orchid -> non-orchid address pairs. */ + if (ipv6_addr_orchid(&ifa->addr) && !ipv6_addr_orchid(daddr)) + continue; + /* Rule 8: Use longest matching prefix */ if (hiscore.rule < 8) { hiscore.matchlen = ipv6_addr_diff(&ifa_result->addr, daddr); |