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

Commit a15a3f6f authored by Al Viro's avatar Al Viro Committed by Linus Torvalds
Browse files

[PATCH] namei fixes (12/19)



In open_namei() we take mntput(nd->mnt);nd->mnt=path.mnt; out of the if
(__follow_mount(...)), making it conditional on nd->mnt != path.mnt instead.

Then we shift the result downstream.

Equivalent transformations.

Signed-off-by: default avatarAl Viro <viro@parcelfarce.linux.theplanet.co.uk>
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent 2f12dbfb
Loading
Loading
Loading
Loading
+9 −2
Original line number Diff line number Diff line
@@ -1506,8 +1506,6 @@ do_last:
			mntput(path.mnt);
			goto exit;
		}
		mntput(nd->mnt);
		nd->mnt = path.mnt;
	}
	error = -ENOENT;
	if (!path.dentry->d_inode)
@@ -1517,6 +1515,9 @@ do_last:

	dput(nd->dentry);
	nd->dentry = path.dentry;
	if (nd->mnt != path.mnt)
		mntput(nd->mnt);
	nd->mnt = path.mnt;
	error = -EISDIR;
	if (path.dentry->d_inode && S_ISDIR(path.dentry->d_inode->i_mode))
		goto exit;
@@ -1528,6 +1529,9 @@ ok:

exit_dput:
	dput(path.dentry);
	if (nd->mnt != path.mnt)
		mntput(nd->mnt);
	nd->mnt = path.mnt;
exit:
	path_release(nd);
	return error;
@@ -1550,6 +1554,9 @@ do_link:
	error = security_inode_follow_link(path.dentry, nd);
	if (error)
		goto exit_dput;
	if (nd->mnt != path.mnt)
		mntput(nd->mnt);
	nd->mnt = path.mnt;
	error = __do_follow_link(&path, nd);
	if (error)
		return error;