• NeilBrown's avatar
    net/sunrpc: xpt_auth_cache should be ignored when expired. · 7715cde8
    NeilBrown authored
    commit d202cce8
        sunrpc: never return expired entries in sunrpc_cache_lookup
    
    moved the 'entry is expired' test from cache_check to
    sunrpc_cache_lookup, so that it happened early and some races could
    safely be ignored.
    
    However the ip_map (in svcauth_unix.c) has a separate single-item
    cache which allows quick lookup without locking.  An entry in this
    case would not be subject to the expiry test and so could be used
    well after it has expired.
    
    This is not normally a big problem because the first time it is used
    after it is expired an up-call will be scheduled to refresh the entry
    (if it hasn't been scheduled already) and the old entry will then
    be invalidated.  So on the second attempt to use it after it has
    expired, ip_map_cached_get will discard it.
    
    However that is subtle and not ideal, so replace the "!cache_valid"
    test with "cache_is_expired".
    In doing this we drop the test on the "CACHE_VALID" bit.  This is
    unnecessary as the bit is never cleared, and an entry will only
    be cached if the bit is set.
    Reported-by: default avatarBodo Stroesser <bstroesser@ts.fujitsu.com>
    Signed-off-by: default avatarNeilBrown <neilb@suse.de>
    Signed-off-by: default avatarJ. Bruce Fields <bfields@redhat.com>
    7715cde8
svcauth_unix.c 21.1 KB