Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 62b2ce96 authored by Sage Weil's avatar Sage Weil Committed by Miklos Szeredi
Browse files

vfs: fix propagation of atomic_open create error on negative dentry



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: default avatarSage Weil <sage@inktank.com>
Signed-off-by: default avatarMiklos Szeredi <mszeredi@suse.cz>
parent af109bca
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -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;
	}