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

Commit fe9ec829 authored by Al Viro's avatar Al Viro
Browse files

do_last(): take fput() on error after opening to out:



make it conditional on *opened & FILE_OPENED; in addition to getting
rid of exit_fput: thing, it simplifies atomic_open() cleanup on
may_open() failure.

Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
parent 47f9dbd3
Loading
Loading
Loading
Loading
+5 −17
Original line number Diff line number Diff line
@@ -2919,9 +2919,6 @@ static int atomic_open(struct nameidata *nd, struct dentry *dentry,
		acc_mode = 0;
	}
	error = may_open(&file->f_path, acc_mode, open_flag);
	if (error)
		fput(file);

out:
	dput(dentry);
	return error;
@@ -3225,18 +3222,13 @@ static int do_last(struct nameidata *nd,
	}
opened:
	error = open_check_o_direct(file);
	if (error)
		goto exit_fput;
	if (!error)
		error = ima_file_check(file, op->acc_mode, *opened);
	if (error)
		goto exit_fput;

	if (will_truncate) {
	if (!error && will_truncate)
		error = handle_truncate(file);
		if (error)
			goto exit_fput;
	}
out:
	if (unlikely(error) && (*opened & FILE_OPENED))
		fput(file);
	if (unlikely(error > 0)) {
		WARN_ON(1);
		error = -EINVAL;
@@ -3246,10 +3238,6 @@ static int do_last(struct nameidata *nd,
	path_put(&save_parent);
	return error;

exit_fput:
	fput(file);
	goto out;

stale_open:
	/* If no saved parent or already retried then can't retry */
	if (!save_parent.dentry || retried)