summaryrefslogtreecommitdiff
path: root/net
diff options
context:
space:
mode:
authorLi RongQing <roy.qing.li@gmail.com>2013-12-19 12:40:26 +0800
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2014-01-15 15:28:48 -0800
commit717e66b3375ed5ea69e8cea4352aeacc64007499 (patch)
treec8a082aa82090e35ecd8e81633e3c66f71da207a /net
parentcf3daa7cbcf9ac14a7549239d7ff3464138a79c8 (diff)
downloadlinux-3.10-717e66b3375ed5ea69e8cea4352aeacc64007499.tar.gz
linux-3.10-717e66b3375ed5ea69e8cea4352aeacc64007499.tar.bz2
linux-3.10-717e66b3375ed5ea69e8cea4352aeacc64007499.zip
ipv6: always set the new created dst's from in ip6_rt_copy
[ Upstream commit 24f5b855e17df7e355eacd6c4a12cc4d6a6c9ff0 ] ip6_rt_copy only sets dst.from if ort has flag RTF_ADDRCONF and RTF_DEFAULT. but the prefix routes which did get installed by hand locally can have an expiration, and no any flag combination which can ensure a potential from does never expire, so we should always set the new created dst's from. This also fixes the new created dst is always expired since the ort, which is created by RA, maybe has RTF_EXPIRES and RTF_ADDRCONF, but no RTF_DEFAULT. Suggested-by: Hannes Frederic Sowa <hannes@stressinduktion.org> CC: Gao feng <gaofeng@cn.fujitsu.com> Signed-off-by: Li RongQing <roy.qing.li@gmail.com> Acked-by: Hannes Frederic Sowa <hannes@stressinduktion.org> Signed-off-by: David S. Miller <davem@davemloft.net> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'net')
-rw-r--r--net/ipv6/route.c4
1 files changed, 1 insertions, 3 deletions
diff --git a/net/ipv6/route.c b/net/ipv6/route.c
index 566c1b4b21b..6c389300f4e 100644
--- a/net/ipv6/route.c
+++ b/net/ipv6/route.c
@@ -1838,9 +1838,7 @@ static struct rt6_info *ip6_rt_copy(struct rt6_info *ort,
else
rt->rt6i_gateway = *dest;
rt->rt6i_flags = ort->rt6i_flags;
- if ((ort->rt6i_flags & (RTF_DEFAULT | RTF_ADDRCONF)) ==
- (RTF_DEFAULT | RTF_ADDRCONF))
- rt6_set_from(rt, ort);
+ rt6_set_from(rt, ort);
rt->rt6i_metric = 0;
#ifdef CONFIG_IPV6_SUBTREES