projects/linux·commit 62b2ce96

vfs: fix propagation of atomic_open create error on negative dentry

62b2ce96 · Sage Weil <[email protected]> · 2012-08-15 13:30:12 -07:00

If ->atomic_open() returns -ENOENT, we take care to return the create
error (e.g., EACCES), if any.  Do the same when ->atomic_open() returns 1
and provides a negative dentry.

This fixes a regression where an unprivileged open O_CREAT fails with
ENOENT instead of EACCES, introduced with the new atomic_open code.  It
is tested by the open/08.t test in the pjd posix test suite, and was
observed on top of fuse (backed by ceph-fuse).

Signed-off-by: Sage Weil <[email protected]>
Signed-off-by: Miklos Szeredi <[email protected]>
Commit
62b2ce964bb901f00a480104bd35a2e1f8d2cf58
Parents
af109bca

Changes

1 files changed · +4 −0

FileStatusAddDelContent
fs/namei.cmodified+4−0View file

fs/namei.c

View file
diff --git a/fs/namei.c b/fs/namei.c
index 26c28ec..db76b86 100644
--- a/fs/namei.c
+++ b/fs/namei.c
@@ -2489,6 +2489,10 @@ static int atomic_open(struct nameidata *nd, struct dentry *dentry,
dput(dentry);
dentry = file->f_path.dentry;
}
+ if (create_error && dentry->d_inode == NULL) {
+ error = create_error;
+ goto out;
+ }
goto looked_up;
}