• Paolo Abeni's avatar
    ipv6: remove from fib tree aged out RTF_CACHE dst · 1859bac0
    Paolo Abeni authored
    The commit 2b760fcf ("ipv6: hook up exception table to store
    dst cache") partially reverted the commit 1e2ea8ad ("ipv6: set
    dst.obsolete when a cached route has expired").
    
    As a result, RTF_CACHE dst referenced outside the fib tree will
    not be removed until the next sernum change; dst_check() does not
    fail on aged-out dst, and dst->__refcnt can't decrease: the aged
    out dst will stay valid for a potentially unlimited time after the
    timeout expiration.
    
    This change explicitly removes RTF_CACHE dst from the fib tree when
    aged out. The rt6_remove_exception() logic will then obsolete the
    dst and other entities will drop the related reference on next
    dst_check().
    
    pMTU exceptions are not aged-out, and are removed from the exception
    table only when the - usually considerably longer - ip6_rt_mtu_expires
    timeout expires.
    
    v1 -> v2:
      - do not touch dst.obsolete in rt6_remove_exception(), not needed
    v2 -> v3:
      - take care of pMTU exceptions, too
    
    Fixes: 2b760fcf ("ipv6: hook up exception table to store dst cache")
    Signed-off-by: default avatarPaolo Abeni <pabeni@redhat.com>
    Acked-by: default avatarWei Wang <weiwan@google.com>
    Acked-by: default avatarMartin KaFai Lau <kafai@fb.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    1859bac0
route.c 118 KB