summaryrefslogtreecommitdiffstats
path: root/fs/nfs/nfs4file.c
diff options
context:
space:
mode:
authorBenjamin Coddington <bcodding@redhat.com>2015-06-25 09:25:50 -0400
committerTrond Myklebust <trond.myklebust@primarydata.com>2015-06-25 19:38:00 -0400
commit18a600897212c1480eb635112baeab017babfc83 (patch)
tree895c037a1c1c0cfd910085d0e112d810cd025322 /fs/nfs/nfs4file.c
parent0c8315dd56577445dd1afe6b9cfa06b7efdf2f82 (diff)
downloadtalos-op-linux-18a600897212c1480eb635112baeab017babfc83.tar.gz
talos-op-linux-18a600897212c1480eb635112baeab017babfc83.zip
nfs: verify open flags before allowing open
Commit 9597c13b forbade opens with O_APPEND|O_DIRECT for NFSv4: nfs: verify open flags before allowing an atomic open Currently, you can open a NFSv4 file with O_APPEND|O_DIRECT, but cannot fcntl(F_SETFL,...) with those flags. This flag combination is explicitly forbidden on NFSv3 opens, and it seems like it should also be on NFSv4. However, you can still open a file with O_DIRECT|O_APPEND if there exists a cached dentry for the file because nfs4_file_open() is used instead of nfs_atomic_open() and the check is bypassed. Add the check in nfs4_file_open() as well. Signed-off-by: Benjamin Coddington <bcodding@redhat.com> Signed-off-by: Trond Myklebust <trond.myklebust@primarydata.com>
Diffstat (limited to 'fs/nfs/nfs4file.c')
-rw-r--r--fs/nfs/nfs4file.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/fs/nfs/nfs4file.c b/fs/nfs/nfs4file.c
index f58c17b3b480..dcd39d4e2efe 100644
--- a/fs/nfs/nfs4file.c
+++ b/fs/nfs/nfs4file.c
@@ -41,6 +41,10 @@ nfs4_file_open(struct inode *inode, struct file *filp)
dprintk("NFS: open file(%pd2)\n", dentry);
+ err = nfs_check_flags(openflags);
+ if (err)
+ return err;
+
if ((openflags & O_ACCMODE) == 3)
openflags--;
OpenPOWER on IntegriCloud