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

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

bail out with ELOOP earlier in do_link loop



If we'd passed through 32 trailing symlinks already, there's
no sense following the 33rd - we'll bail out anyway.  Better
bugger off earlier.

It *does* change behaviour, after a fashion - if the 33rd happens
to be a procfs-style symlink, original code *would* allow it.
This one will not.  Cry me a river if that hurts you.  Please, do.
And post a video of that, while you are at it.

Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
parent a1e28038
Loading
Loading
Loading
Loading
+1 −6
Original line number Diff line number Diff line
@@ -1873,7 +1873,7 @@ exit_parent:

do_link:
	error = -ELOOP;
	if (flag & O_NOFOLLOW)
	if ((flag & O_NOFOLLOW) || count++ == 32)
		goto exit_dput;
	/*
	 * This is subtle. Instead of calling do_follow_link() we do the
@@ -1915,11 +1915,6 @@ do_link:
		__putname(nd.last.name);
		goto exit;
	}
	error = -ELOOP;
	if (count++==32) {
		__putname(nd.last.name);
		goto exit;
	}
	filp = do_last(&nd, &path, open_flag, flag, acc_mode, mode,
		       pathname, &is_link);
	__putname(nd.last.name);