android_kernel_samsung_univ.../fs/nfsd
Chuck Lever 1d13f37f6a nfsd: Close race between nfsd4_release_lockowner and nfsd4_lock
commit 885848186fbc2d1d8fb6d2fdc2156638ae289a46 upstream.

nfsd4_release_lockowner finds a lock owner that has no lock state,
and drops cl_lock. Then release_lockowner picks up cl_lock and
unhashes the lock owner.

During the window where cl_lock is dropped, I don't see anything
preventing a concurrent nfsd4_lock from finding that same lock owner
and adding lock state to it.

Move release_lockowner() into nfsd4_release_lockowner and hang onto
the cl_lock until after the lock owner's state cannot be found
again.

Found by inspection, we don't currently have a reproducer.

Fixes: 2c41beb0e5 ("nfsd: reduce cl_lock thrashing in ... ")
Reviewed-by: Jeff Layton <jlayton@redhat.com>
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: J. Bruce Fields <bfields@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2016-09-24 10:07:36 +02: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
idmap.h
Kconfig
lockd.c
Makefile
netns.h
nfs2acl.c nfsd: check permissions when setting ACLs 2016-07-27 09:47:30 -07:00
nfs3acl.c nfsd: check permissions when setting ACLs 2016-07-27 09:47:30 -07:00
nfs3proc.c
nfs3xdr.c
nfs4acl.c nfsd: check permissions when setting ACLs 2016-07-27 09:47:30 -07:00
nfs4callback.c nfsd4/rpc: move backchannel create logic into rpc code 2016-07-27 09:47:30 -07:00
nfs4idmap.c
nfs4layouts.c nfsd: don't hold ls_mutex across a layout recall 2015-12-16 11:49:58 -05:00
nfs4proc.c nfsd: fix deadlock secinfo+readdir compound 2016-04-12 09:09:03 -07:00
nfs4recover.c
nfs4state.c nfsd: Close race between nfsd4_release_lockowner and nfsd4_lock 2016-09-24 10:07:36 +02:00
nfs4xdr.c nfsd4: fix bad bounds checking 2016-04-12 09:09:03 -07:00
nfscache.c nfsd: remove recurring workqueue job to clean DRC 2015-11-10 09:25:51 -05:00
nfsctl.c
nfsd.h
nfsfh.c
nfsfh.h
nfsproc.c
nfssvc.c
nfsxdr.c
pnfs.h
state.h nfsd: Always lock state exclusively. 2016-07-27 09:47:30 -07:00
stats.c
stats.h
trace.c nfsd: move include of state.h from trace.c to trace.h 2015-10-23 15:57:29 -04:00
trace.h nfsd: move include of state.h from trace.c to trace.h 2015-10-23 15:57:29 -04:00
vfs.c
vfs.h
xdr3.h
xdr4.h
xdr4cb.h
xdr.h