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().
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);
mntput(mnt);
return res;
out:
+ spin_unlock(&vfsmount_lock);
res = -EACCES;
goto exit;
}