mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-04 10:12:16 +09:00
NFSv4: Handle the special Linux file open access mode
commit44942b4e45upstream. According to the open() manpage, Linux reserves the access mode 3 to mean "check for read and write permission on the file and return a file descriptor that can't be used for reading or writing." Currently, the NFSv4 code will ask the server to open the file, and will use an incorrect share access mode of 0. Since it has an incorrect share access mode, the client later forgets to send a corresponding close, meaning it can leak stateids on the server. Fixes:ce4ef7c0a8("NFS: Split out NFS v4 file operations") Cc: stable@vger.kernel.org # 3.6+ Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
1a03a8f707
commit
eada919ddd
@@ -1034,6 +1034,7 @@ int nfs_open(struct inode *inode, struct file *filp)
|
||||
nfs_fscache_open_file(inode, filp);
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(nfs_open);
|
||||
|
||||
/*
|
||||
* This function is called whenever some part of NFS notices that
|
||||
|
||||
@@ -50,7 +50,7 @@ nfs4_file_open(struct inode *inode, struct file *filp)
|
||||
return err;
|
||||
|
||||
if ((openflags & O_ACCMODE) == 3)
|
||||
openflags--;
|
||||
return nfs_open(inode, filp);
|
||||
|
||||
/* We can't create new files here */
|
||||
openflags &= ~(O_CREAT|O_EXCL);
|
||||
|
||||
Reference in New Issue
Block a user