linux/fs/nfs
Trond Myklebust 9650f565c6 NFS: Fix another OPEN_DOWNGRADE bug
commit e547f26283 upstream.

Olga Kornievskaia reports that the following test fails to trigger
an OPEN_DOWNGRADE on the wire, and only triggers the final CLOSE.

	fd0 = open(foo, RDRW)   -- should be open on the wire for "both"
	fd1 = open(foo, RDONLY)  -- should be open on the wire for "read"
	close(fd0) -- should trigger an open_downgrade
	read(fd1)
	close(fd1)

The issue is that we're missing a check for whether or not the current
state transitioned from an O_RDWR state as opposed to having transitioned
from a combination of O_RDONLY and O_WRONLY.

Reported-by: Olga Kornievskaia <aglo@umich.edu>
Fixes: cd9288ffae ("NFSv4: Fix another bug in the close/open_downgrade code")
Signed-off-by: Trond Myklebust <trond.myklebust@primarydata.com>
Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com>
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
History 2016-08-22 22:38:23 +01:00
..
blocklayout nfs: merge nfs_pgio_data into _header 2014-10-05 13:41:00 -07:00
filelayout NFSv4: Ensure that we call FREE_STATEID when NFSv4.x stateids are revoked 2014-11-27 11:21:46 +00:00
objlayout nfs: merge nfs_pgio_data into _header 2014-10-05 13:41:00 -07:00
cache_lib.c NFS: simplify and clean cache library 2013-02-15 10:43:36 -05:00
cache_lib.h NFS: simplify and clean cache library 2013-02-15 10:43:36 -05:00
callback.c nfs: fix high load average due to callback thread sleeping 2015-05-06 10:36:20 +01:00
callback.h NFS: Add in v4.2 callback operation 2013-06-08 16:20:18 -04:00
callback_proc.c NFSv4.1: Minor optimisation in get_layout_by_fh_locked() 2014-02-19 21:21:06 -05:00
callback_xdr.c SUNRPC: Fix callback channel 2016-01-11 10:50:19 +00:00
client.c nfs: fix kernel warning when removing proc entry 2014-11-14 10:45:39 +00:00
delegation.c NFSv4: Don't call put_rpccred() under the rcu_read_lock() 2015-03-18 15:06:08 +00:00
delegation.h NFSv4: Fix races between nfs_remove_bad_delegation() and delegation return 2014-11-27 11:21:45 +00:00
dir.c make nfs_atomic_open() call d_drop() on all ->open_context() errors. 2016-08-22 22:38:22 +01:00
direct.c NFS: struct nfs_commit_info.lock must always point to inode->i_lock 2015-03-02 15:04:25 +00:00
dns_resolve.c NFS: Enabling v4.2 should not recompile nfsd and lockd 2013-11-19 16:20:40 -05:00
dns_resolve.h NFS: DNS resolver cache per network namespace context introduced 2012-01-31 18:20:26 -05:00
file.c Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs 2014-06-12 10:30:18 -07:00
fscache-index.c NFS: Use the inode->i_version to cache NFSv4 change attribute information 2011-10-18 09:14:34 -07:00
fscache.c NFS: Use i_writecount to control whether to get an fscache cookie in nfs_open() 2013-09-27 18:40:25 +01:00
fscache.h NFS: Use i_writecount to control whether to get an fscache cookie in nfs_open() 2013-09-27 18:40:25 +01:00
getroot.c move d_rcu from overlapping d_child to overlapping d_alias 2015-01-15 10:44:58 +00:00
idmap.c NFSv4: Convert idmapper to use the new framework for pipefs dentries 2013-09-01 11:12:42 -04:00
inode.c NFS: Fix attribute cache revalidation 2016-02-02 19:09:06 +00:00
internal.h NFS: Fix /proc/fs/nfsfs/servers and /proc/fs/nfsfs/volumes 2014-11-03 11:28:21 +00:00
iostat.h NFS: Squelch compiler warning in nfs_add_server_stats() 2010-05-14 15:09:31 -04:00
Kconfig nfs: fix pnfs Kconfig defaults 2013-11-15 13:41:43 -05:00
Makefile Push the file layout driver into a subdirectory 2014-05-29 20:21:56 -04:00
mount_clnt.c nfs: have nfs_mount fake up a auth_flavs list when the server didn't provide it 2013-06-28 15:51:51 -04:00
namespace.c nfs: use %p[dD] instead of open-coded (and often racy) equivalents 2013-10-24 23:34:50 -04:00
netns.h NFS: Fix /proc/fs/nfsfs/servers and /proc/fs/nfsfs/volumes 2014-11-03 11:28:21 +00:00
nfs.h NFS: Convert v4 into a module 2012-07-30 19:06:52 -04:00
nfs2super.c NFS: Convert v2 into a module 2012-07-30 19:06:41 -04:00
nfs2xdr.c NFS: Create a common results structure for reads and writes 2014-05-28 18:12:43 -04:00
nfs3acl.c NFSv3: Fix another acl regression 2014-09-05 16:36:42 -07:00
nfs3client.c NFS: Only initialize the ACL client in the v3 case 2012-07-30 19:05:54 -04:00
nfs3proc.c nfs: merge nfs_pgio_data into _header 2014-10-05 13:41:00 -07:00
nfs3super.c nfs: use generic posix ACL infrastructure for v3 Posix ACLs 2014-01-26 08:26:20 -05:00
nfs3xdr.c NFS: Fix size of NFSACL SETACL operations 2015-07-15 10:01:24 +01:00
nfs4_fs.h nfs: merge nfs_pgio_data into _header 2014-10-05 13:41:00 -07:00
nfs4client.c nfs4: start callback_ident at idr 1 2015-12-18 16:06:34 +00:00
nfs4file.c Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs 2014-06-12 10:30:18 -07:00
nfs4getroot.c NFSv4: Fix security auto-negotiation 2013-09-07 16:18:30 -04:00
nfs4namespace.c NFSv4: test SECINFO RPC_AUTH_GSS pseudoflavors for support 2014-06-24 18:46:58 -04:00
nfs4proc.c NFS: Fix another OPEN_DOWNGRADE bug 2016-08-22 22:38:23 +01:00
nfs4renewd.c NFSv4.1: Fix an NFSv4.1 state renewal regression 2014-10-30 09:40:14 -07:00
nfs4session.c NFSv4.1: nfs4_destroy_session must call rpc_destroy_waitqueue 2014-02-01 15:13:39 -05:00
nfs4session.h NFSv4.1: nfs4_destroy_session must call rpc_destroy_waitqueue 2014-02-01 15:13:39 -05:00
nfs4state.c Failing to send a CLOSE if file is opened WRONLY and server reboots on a 4.x mount 2015-12-09 11:40:56 +00:00
nfs4super.c mm + fs: store shadow entries in page cache 2014-04-03 16:21:01 -07:00
nfs4sysctl.c nfs: convert use of typedef ctl_table to struct ctl_table 2014-06-06 16:08:16 -07:00
nfs4trace.c NFSv4.1: Add tracepoints for debugging slot table operations 2013-08-22 08:58:27 -04:00
nfs4trace.h nfs: merge nfs_pgio_data into _header 2014-10-05 13:41:00 -07:00
nfs4xdr.c NFS: Create a common results structure for reads and writes 2014-05-28 18:12:43 -04:00
nfsroot.c SUNRPC/NFS: Add Kbuild dependencies for NFS_DEBUG/RPC_DEBUG 2012-03-20 13:08:26 -04:00
nfstrace.c NFS: Add event tracing for generic NFS lookups 2013-08-22 08:58:18 -04:00
nfstrace.h NFS: fix the handling of NFS_INO_INVALID_DATA flag in nfs_revalidate_mapping 2014-01-27 15:35:56 -05:00
pagelist.c nfs: Fix unused variable error 2016-01-28 11:57:53 +00:00
pnfs.c pNFS: Fix a memory leak when attempted pnfs fails 2015-07-15 10:00:42 +01:00
pnfs.h pnfs: add pnfs_put_lseg_async 2014-10-05 13:41:00 -07:00
pnfs_dev.c hlist: drop the node parameter from iterators 2013-02-27 19:10:24 -08:00
proc.c nfs: merge nfs_pgio_data into _header 2014-10-05 13:41:00 -07:00
read.c nfs: merge nfs_pgio_data into _header 2014-10-05 13:41:00 -07:00
super.c nfs: reject changes to resvport and sharecache during remount 2014-09-05 16:36:42 -07:00
symlink.c include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h 2010-03-30 22:02:32 +09:00
sysctl.c nfs: convert use of typedef ctl_table to struct ctl_table 2014-06-06 16:08:16 -07:00
unlink.c nfs: emit a fsnotify_nameremove call in sillyrename codepath 2014-03-17 15:14:17 -04:00
write.c nfs: don't sleep with inode lock in lock_and_join_requests 2014-10-05 13:41:01 -07:00