Skip to content

Commit

Permalink
ipv4: Don't report stale pmtu values to userspace
Browse files Browse the repository at this point in the history
We report cached pmtu values even if they are already expired.
Change this to not report these values after they are expired
and fix a race in the expire time calculation, as suggested by
Eric Dumazet.

Signed-off-by: Steffen Klassert <steffen.klassert@secunet.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Steffen Klassert authored and David S. Miller committed Oct 8, 2012
1 parent 7f92d33 commit ee9a8f7
Showing 1 changed file with 11 additions and 8 deletions.
19 changes: 11 additions & 8 deletions net/ipv4/route.c
Original file line number Diff line number Diff line change
Expand Up @@ -2187,8 +2187,18 @@ static int rt_fill_info(struct net *net, __be32 dst, __be32 src,
nla_put_be32(skb, RTA_GATEWAY, rt->rt_gateway))
goto nla_put_failure;

expires = rt->dst.expires;
if (expires) {
unsigned long now = jiffies;

if (time_before(now, expires))
expires -= now;
else
expires = 0;
}

memcpy(metrics, dst_metrics_ptr(&rt->dst), sizeof(metrics));
if (rt->rt_pmtu)
if (rt->rt_pmtu && expires)
metrics[RTAX_MTU - 1] = rt->rt_pmtu;
if (rtnetlink_put_metrics(skb, metrics) < 0)
goto nla_put_failure;
Expand All @@ -2198,13 +2208,6 @@ static int rt_fill_info(struct net *net, __be32 dst, __be32 src,
goto nla_put_failure;

error = rt->dst.error;
expires = rt->dst.expires;
if (expires) {
if (time_before(jiffies, expires))
expires -= jiffies;
else
expires = 0;
}

if (rt_is_input_route(rt)) {
if (nla_put_u32(skb, RTA_IIF, rt->rt_iif))
Expand Down

0 comments on commit ee9a8f7

Please sign in to comment.