Open with O_CREAT flag set fails to open existing files on non writable directories
authorSachin Prabhu <sprabhu@redhat.com>
Wed, 20 Apr 2011 12:09:35 +0000 (13:09 +0100)
committerSteve Conklin <sconklin@canonical.com>
Thu, 2 Jun 2011 19:23:16 +0000 (14:23 -0500)
commit45e220d02830f9cb41af62509e8e85cc746426b5
tree5f5ef60bf531417c5a96c3ac29d422e31ddd7441
parent03f56cfce0cfc047045c003e181d09f89b6956e0
Open with O_CREAT flag set fails to open existing files on non writable directories

BugLink: http://bugs.launchpad.net/bugs/780546

commit 1574dff8996ab1ed92c09012f8038b5566fce313 upstream.

An open on a NFS4 share using the O_CREAT flag on an existing file for
which we have permissions to open but contained in a directory with no
write permissions will fail with EACCES.

A tcpdump shows that the client had set the open mode to UNCHECKED which
indicates that the file should be created if it doesn't exist and
encountering an existing flag is not an error. Since in this case the
file exists and can be opened by the user, the NFS server is wrong in
attempting to check create permissions on the parent directory.

The patch adds a conditional statement to check for create permissions
only if the file doesn't exist.

Signed-off-by: Sachin S. Prabhu <sprabhu@redhat.com>
Signed-off-by: J. Bruce Fields <bfields@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Signed-off-by: Tim Gardner <tim.gardner@canonical.com>
fs/nfsd/vfs.c