ipv6: Check dest prefix length on original route not copied one in rt6_alloc_cow().
authorDavid S. Miller <davem@davemloft.net>
Tue, 13 Dec 2011 22:35:06 +0000 (17:35 -0500)
committerDavid S. Miller <davem@davemloft.net>
Tue, 13 Dec 2011 22:35:06 +0000 (17:35 -0500)
After commit 8e2ec639173f325977818c45011ee176ef2b11f6 ("ipv6: don't
use inetpeer to store metrics for routes.") the test in rt6_alloc_cow()
for setting the ANYCAST flag is now wrong.

'rt' will always now have a plen of 128, because it is set explicitly
to 128 by ip6_rt_copy.

So to restore the semantics of the test, check the destination prefix
length of 'ort'.

Signed-off-by: David S. Miller <davem@davemloft.net>
net/ipv6/route.c

index 3399dd326287e1504b9c5bd72701143574dda4b4..b582a0a0f1c5a31ba926f70cf1947db00f7168ff 100644 (file)
@@ -728,7 +728,7 @@ static struct rt6_info *rt6_alloc_cow(const struct rt6_info *ort,
                int attempts = !in_softirq();
 
                if (!(rt->rt6i_flags&RTF_GATEWAY)) {
-                       if (rt->rt6i_dst.plen != 128 &&
+                       if (ort->rt6i_dst.plen != 128 &&
                            ipv6_addr_equal(&ort->rt6i_dst.addr, daddr))
                                rt->rt6i_flags |= RTF_ANYCAST;
                        ipv6_addr_copy(&rt->rt6i_gateway, daddr);