linux-stable/fs/nfsd
J. Bruce Fields 880a3a5325 nfsd: fix incorrect umasks
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: 47057abde5 (nfsd: add support for the umask attribute)
Cc: stable@vger.kernel.org
Reported-by: Lucash Stach <l.stach@pengutronix.de>
Signed-off-by: J. Bruce Fields <bfields@redhat.com>
2018-04-03 16:27:08 -04:00
..
acl.h
auth.c
auth.h
blocklayout.c
blocklayoutxdr.c
blocklayoutxdr.h
cache.h
current_stateid.h
export.c
export.h
fault_inject.c
flexfilelayout.c
flexfilelayoutxdr.c
flexfilelayoutxdr.h
idmap.h
Kconfig
lockd.c
Makefile
netns.h
nfs2acl.c
nfs3acl.c
nfs3proc.c NFSD: Clean up legacy NFS SYMLINK argument XDR decoders 2018-04-03 15:08:16 -04:00
nfs3xdr.c NFSD: Clean up legacy NFS SYMLINK argument XDR decoders 2018-04-03 15:08:16 -04:00
nfs4acl.c
nfs4callback.c nfsd: use correct enum type in decode_cb_op_status 2018-04-03 15:08:08 -04:00
nfs4idmap.c
nfs4layouts.c nfsd: Add "nfsd_" to trace point names 2018-04-03 15:08:14 -04:00
nfs4proc.c nfsd: fix incorrect umasks 2018-04-03 16:27:08 -04:00
nfs4recover.c
nfs4state.c nfsd: fix boolreturn.cocci warnings 2018-04-03 15:08:08 -04:00
nfs4xdr.c nfsd: fix incorrect umasks 2018-04-03 16:27:08 -04:00
nfscache.c
nfsctl.c
nfsd.h
nfsfh.c nfsd: don't require low ports for gss requests 2018-03-19 16:38:13 -04:00
nfsfh.h This request is late, apologies. 2018-02-08 15:18:32 -08:00
nfsproc.c NFSD: Clean up legacy NFS SYMLINK argument XDR decoders 2018-04-03 15:08:16 -04:00
nfssvc.c
nfsxdr.c NFSD: Clean up legacy NFS SYMLINK argument XDR decoders 2018-04-03 15:08:16 -04:00
pnfs.h
state.h
stats.c
stats.h
trace.c
trace.h nfsd: Trace NFSv4 COMPOUND execution 2018-04-03 15:08:15 -04:00
vfs.c nfsd: Add I/O trace points in the NFSv4 read proc 2018-04-03 15:08:15 -04:00
vfs.h nfsd: Add I/O trace points in the NFSv4 read proc 2018-04-03 15:08:15 -04:00
xdr.h NFSD: Clean up legacy NFS SYMLINK argument XDR decoders 2018-04-03 15:08:16 -04:00
xdr3.h NFSD: Clean up legacy NFS SYMLINK argument XDR decoders 2018-04-03 15:08:16 -04:00
xdr4.h nfsd: fix incorrect umasks 2018-04-03 16:27:08 -04:00
xdr4cb.h