Skip to content

Commit

Permalink
ipv6: recursive check rt->dst.from when call rt6_check_expired
Browse files Browse the repository at this point in the history
If dst cache dst_a copies from dst_b, and dst_b copies from dst_c, check
if dst_a is expired or not, we should not end with dst_a->dst.from, dst_b,
we should check dst_c.

CC: Gao feng <gaofeng@cn.fujitsu.com>
Signed-off-by: Li RongQing <roy.qing.li@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Li RongQing authored and David S. Miller committed Sep 19, 2012
1 parent b40863c commit 3fd91fb
Showing 1 changed file with 1 addition and 5 deletions.
6 changes: 1 addition & 5 deletions net/ipv6/route.c
Original file line number Diff line number Diff line change
Expand Up @@ -369,15 +369,11 @@ static void ip6_dst_ifdown(struct dst_entry *dst, struct net_device *dev,

static bool rt6_check_expired(const struct rt6_info *rt)
{
struct rt6_info *ort = NULL;

if (rt->rt6i_flags & RTF_EXPIRES) {
if (time_after(jiffies, rt->dst.expires))
return true;
} else if (rt->dst.from) {
ort = (struct rt6_info *) rt->dst.from;
return (ort->rt6i_flags & RTF_EXPIRES) &&
time_after(jiffies, ort->dst.expires);
return rt6_check_expired((struct rt6_info *) rt->dst.from);
}
return false;
}
Expand Down

0 comments on commit 3fd91fb

Please sign in to comment.