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

do_last(): don't let a bogus return value from ->open() et.al. to confuse us



... into returning a positive to path_openat(), which would interpret that
as "symlink had been encountered" and proceed to corrupt memory, etc.
It can only happen due to a bug in some ->open() instance or in some LSM
hook, etc., so we report any such event *and* make sure it doesn't trick
us into further unpleasantness.

Cc: stable@vger.kernel.org # v3.6+, at least
Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
parent 0fcbf996
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -3273,6 +3273,10 @@ opened:
			goto exit_fput;
	}
out:
	if (unlikely(error > 0)) {
		WARN_ON(1);
		error = -EINVAL;
	}
	if (got_write)
		mnt_drop_write(nd->path.mnt);
	path_put(&save_parent);