Commit 541f40bd authored by Andrew Morton's avatar Andrew Morton Committed by Linus Torvalds

[PATCH] proc_check_root() locking fix

From: Maneesh Soni <maneesh@in.ibm.com>

The patch fixes locking in proc_check_root().  It brings is_subdir() call
under vfsmount_lock.  Holding vfsmount_lock will ensure mnt_mountpoint
dentry is intact and the dentry does not go away while it is being checked
in is_subdir().
parent b5a660ee
......@@ -425,17 +425,15 @@ static int proc_check_root(struct inode *inode)
mnt = vfsmnt;
while (vfsmnt != our_vfsmnt) {
if (vfsmnt == vfsmnt->mnt_parent) {
spin_unlock(&vfsmount_lock);
if (vfsmnt == vfsmnt->mnt_parent)
goto out;
}
de = vfsmnt->mnt_mountpoint;
vfsmnt = vfsmnt->mnt_parent;
}
spin_unlock(&vfsmount_lock);
if (!is_subdir(de, base))
goto out;
spin_unlock(&vfsmount_lock);
exit:
dput(base);
......@@ -444,6 +442,7 @@ static int proc_check_root(struct inode *inode)
mntput(mnt);
return res;
out:
spin_unlock(&vfsmount_lock);
res = -EACCES;
goto exit;
}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment