• Trond Myklebust's avatar
    RPC: Fix two potential races in put_rpccred · f0380f3d
    Trond Myklebust authored
    It is possible for rpcauth_destroy_credcache() to cause the rpc credentials
    to be unhashed while put_rpccred is waiting for the rpc_credcache_lock on
    another cpu. Should this happen, then we can end up calling
    hlist_del_rcu(&cred->cr_hash) a second time in put_rpccred, thus causing
    list corruption.
    
    Should the credential actually be hashed, it is also possible for
    rpcauth_lookup_credcache to find and reference it before we get round to
    unhashing it. In this case, the call to rpcauth_unhash_cred will fail, and
    so we should just exit without destroying the cred.
    Reported-by: default avatarNeil Brown <neilb@suse.de>
    Signed-off-by: default avatarTrond Myklebust <Trond.Myklebust@netapp.com>
    f0380f3d
auth.c 13.7 KB