Commit 3ad5615a authored by Al Viro's avatar Al Viro
Browse files

do_last(): merge the may_open() calls



have FMODE_OPENED case rejoin the main path at earlier point

Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
parent 7be219b4
Loading
Loading
Loading
Loading
+3 −7
Original line number Diff line number Diff line
@@ -3207,10 +3207,7 @@ static const char *do_last(struct nameidata *nd,
		audit_inode(nd->name, file->f_path.dentry, 0);
		dput(nd->path.dentry);
		nd->path.dentry = dentry;
		error = may_open(&nd->path, acc_mode, open_flag);
		if (error)
			goto out;
		goto opened;
		goto finish_open_created;
	}

	if (file->f_mode & FMODE_CREATED) {
@@ -3277,11 +3274,10 @@ finish_open_created:
	error = may_open(&nd->path, acc_mode, open_flag);
	if (error)
		goto out;
	BUG_ON(file->f_mode & FMODE_OPENED); /* once it's opened, it's opened */
	if (!(file->f_mode & FMODE_OPENED))
		error = vfs_open(&nd->path, file);
	if (error)
		goto out;
opened:
	error = ima_file_check(file, op->acc_mode);
	if (!error && will_truncate)
		error = handle_truncate(file);