• David S. Miller's avatar
    [IPSEC]: Validate properly in xfrm_dst_check() · d49c73c7
    David S. Miller authored
    If dst->obsolete is -1, this is a signal from the
    bundle creator that we want the XFRM dst and the
    dsts that it references to be validated on every
    use.
    
    I misunderstood this intention when I changed
    xfrm_dst_check() to always return NULL.
    
    Now, when we purge a dst entry, by running dst_free()
    on it.  This will set the dst->obsolete to a positive
    integer, and we want to return NULL in that case so
    that the socket does a relookup for the route.
    
    Thus, if dst->obsolete<0, let stale_bundle() validate
    the state, else always return NULL.
    
    In general, we need to do things more intelligently
    here because we flush too much state during rule
    changes.  Herbert Xu has some ideas wherein the key
    manager gives us some help in this area.  We can also
    use smarter state management algorithms inside of
    the kernel as well.
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    d49c73c7
xfrm_policy.c 33.2 KB