• Benjamin LaHaise's avatar
    ipv4: check rt_genid in dst_check · 32ed4a99
    Benjamin LaHaise authored
    commit d11a4dc1
    Author: Timo Teräs <timo.teras@iki.fi>
    Date:   Thu Mar 18 23:20:20 2010 +0000
    
        ipv4: check rt_genid in dst_check
    
        Xfrm_dst keeps a reference to ipv4 rtable entries on each
        cached bundle. The only way to renew xfrm_dst when the underlying
        route has changed, is to implement dst_check for this. This is
        what ipv6 side does too.
    
        The problems started after 87c1e12b
        ("ipsec: Fix bogus bundle flowi") which fixed a bug causing xfrm_dst
        to not get reused, until that all lookups always generated new
        xfrm_dst with new route reference and path mtu worked. But after the
        fix, the old routes started to get reused even after they were expired
        causing pmtu to break (well it would occationally work if the rtable
        gc had run recently and marked the route obsolete causing dst_check to
        get called).
    Signed-off-by: default avatarTimo Teras <timo.teras@iki.fi>
    Acked-by: default avatarHerbert Xu <herbert@gondor.apana.org.au>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    
    This commit is based on the above, with the addition of verifying blackhole
    routes in the same manner.
    
    Fixing the issue with blackhole routes as it was accomplished in mainline
    would require pulling in a lot more code, and people were not interested
    in pulling in all of the dependencies given the much higher risk of trying
    to select the right subset of changes to include.  The addition of the
    single line of "dst->obsolete = -1;" in ipv4_dst_blackhole() was much
    easier to verify, and is in the spirit of the patch in question.
    This is the minimal set of changes to fix the bug in question.
    
    A test case is available here :
      http://marc.info/?l=linux-netdev&m=135015076708950&w=2Signed-off-by: default avatarBenjamin LaHaise <bcrl@kvack.org>
    Signed-off-by: default avatarWilly Tarreau <w@1wt.eu>
    32ed4a99
route.c 85.1 KB