Bug #367
Fwd: [PATCH] ipv6: fix rt6_update_expires
| Status: | Rejected | Start date: | ||
|---|---|---|---|---|
| Priority: | Normal | Due date: | ||
| Assignee: | % Done: | 0% |
||
| Category: | Linux Kernel | Spent time: | 1.00 hour | |
| Target version: | 1st Public Cerowrt release |
Description
---------- Forwarded message ----------
From: Gao feng <gaofeng@cn.fujitsu.com>
Date: Tue, Apr 17, 2012 at 7:24 PM
Subject: Re: [PATCH] ipv6: fix rt6_update_expires
To: Jiri Bohac <jbohac@suse.cz>
Cc: David Miller <davem@davemloft.net>, netdev@vger.kernel.org
于 2012年04月16日 21:34, Jiri Bohac 写道:
Commit 1716a961 (ipv6: fix problem with expired dst cache) broke PMTU discovery. rt6_update_expires() calls dst_set_expires(), which only updates dst->expires if it has not been set previously (expires 0) or if the new expires is earlier than the current dst->expires.
rt6_update_expires() needs to zero rt->dst.expires, otherwise it will contain ivalid data left over from rt->dst.from and will confuse dst_set_expires().
Signed-off-by: Jiri Bohac <jbohac@suse.cz>
diff --git a/include/net/ip6_fib.h b/include/net/ip6_fib.h index ad4126f..68c1f94 100644 --- a/include/net/ip6_fib.h +++ b/include/net/ip6_fib.h
@ -143,8 +143,13@ static inline void rt6_set_expires(struct rt6_info *rt, unsigned long expires)static inline void rt6_update_expires(struct rt6_info *rt, int timeout) { - if (!(rt->rt6i_flags & RTF_EXPIRES) && rt->dst.from) - dst_release(rt->dst.from); + if (!(rt->rt6i_flags & RTF_EXPIRES)) { + if (rt->dst.from) + dst_release(rt->dst.from); + /* dst_set_expires relies on expires 0 + if it has not been set previously */ + rt->dst.expires = 0; + }
dst_set_expires(&rt->dst, timeout); rt->rt6i_flags |= RTF_EXPIRES;
looks good to me, thanks.
History
Updated by Dave Täht about 1 year ago
- Target version set to 1st Public Cerowrt release
- Assignee set to Dave Täht
- Status changed from New to Rejected
- Category set to Linux Kernel
this is a 3.4 issue, now fixed. No need to backport.