nfs: verify open flags before allowing open
authorBenjamin Coddington <bcodding@redhat.com>
Thu, 25 Jun 2015 13:25:50 +0000 (09:25 -0400)
committerTrond Myklebust <trond.myklebust@primarydata.com>
Thu, 25 Jun 2015 23:38:00 +0000 (19:38 -0400)
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>
fs/nfs/nfs4file.c

index f58c17b3b480367c6322359ae7ca4b33b3695348..dcd39d4e2efebd78eed64d4df00fd2745f747027 100644 (file)
@@ -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--;