• J. Bruce Fields's avatar
    nfsd: fix incorrect umasks · 880a3a53
    J. Bruce Fields authored
    We're neglecting to clear the umask after it's set, which can cause a
    later unrelated rpc to (incorrectly) use the same umask if it happens to
    be processed by the same thread.
    
    There's a more subtle problem here too:
    
    An NFSv4 compound request is decoded all in one pass before any
    operations are executed.
    
    Currently we're setting current->fs->umask at the time we decode the
    compound.  In theory a single compound could contain multiple creates
    each setting a umask.  In that case we'd end up using whichever umask
    was passed in the *last* operation as the umask for all the creates,
    whether that was correct or not.
    
    So, we should just be saving the umask at decode time and waiting to set
    it until we actually process the corresponding operation.
    
    In practice it's unlikely any client would do multiple creates in a
    single compound.  And even if it did they'd likely be from the same
    process (hence carry the same umask).  So this is a little academic, but
    we should get it right anyway.
    
    Fixes: 47057abd (nfsd: add support for the umask attribute)
    Cc: stable@vger.kernel.org
    Reported-by: default avatarLucash Stach <l.stach@pengutronix.de>
    Signed-off-by: default avatarJ. Bruce Fields <bfields@redhat.com>
    880a3a53
nfs4xdr.c 114 KB