• J. Bruce Fields's avatar
    nfsd: fix use-after-free due to delegation race · 548ec080
    J. Bruce Fields authored
    A delegation break could arrive as soon as we've called vfs_setlease.  A
    delegation break runs a callback which immediately (in
    nfsd4_cb_recall_prepare) adds the delegation to del_recall_lru.  If we
    then exit nfs4_set_delegation without hashing the delegation, it will be
    freed as soon as the callback is done with it, without ever being
    removed from del_recall_lru.
    
    Symptoms show up later as use-after-free or list corruption warnings,
    usually in the laundromat thread.
    
    I suspect aba2072f "nfsd: grant read delegations to clients holding
    writes" made this bug easier to hit, but I looked as far back as v3.0
    and it looks to me it already had the same problem.  So I'm not sure
    where the bug was introduced; it may have been there from the beginning.
    
    Cc: stable@vger.kernel.org
    Signed-off-by: default avatarJ. Bruce Fields <bfields@redhat.com>
    548ec080
nfs4state.c 198 KB