Re: [PATCH v5] ipv6: Fix problem with expired dst cache
flat view
From: David Miller <davem@davemloft.net>
Date: 2012-03-17 05:33:58
From: Gao feng <redacted> Date: Mon, 5 Mar 2012 15:16:02 +0800
If the ipv6 dst cache which copy from the dst generated by ICMPV6 RA packet. this dst cache will not check expire because it has no RTF_EXPIRES flag. So this dst cache will always be used until the dst gc run. Change the struct dst_entry,add a union contains new pointer from and expires. When rt6_info.rt6i_flags has no RTF_EXPIRES flag,the dst.expires has no use. we can use this field to point to where the dst cache copy from. The dst.from is only used in IPV6. In func rt6_check_expired check if rt6_info.dst.from is expired. In func ip6_rt_copy only set dst.from when the ort has flag RTF_ADDRCONF and RTF_DEFAULT.then hold the ort. In func ip6_dst_destroy release the ort. Add some functions to operate the RTF_EXPIRES flag and expires(from) together. and change the code to use these new adding functions. Signed-off-by: Gao feng <redacted>
I see some unprotected access to dst.expires in the router discovery code in net/ipv6/ndisc.c, doesn't that need to be updated? There are probably some more similar cases elsewhere in the ipv6 code too.