mirror of
https://github.com/torvalds/linux
synced 2024-09-20 02:57:25 +00:00
fix autofs/afs/etc. magic mountpoint breakage
We end up trying to kfree() nd.last.name on open("/mnt/tmp", O_CREAT) if /mnt/tmp is an autofs direct mount. The reason is that nd.last_type is bogus here; we want LAST_BIND for everything of that kind and we get LAST_NORM left over from finding parent directory. So make sure that it *is* set properly; set to LAST_BIND before doing ->follow_link() - for normal symlinks it will be changed by __vfs_follow_link() and everything else needs it set that way. Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
parent
004b350632
commit
86acdca1b6
|
@ -561,6 +561,7 @@ static __always_inline int __do_follow_link(struct path *path, struct nameidata
|
||||||
dget(dentry);
|
dget(dentry);
|
||||||
}
|
}
|
||||||
mntget(path->mnt);
|
mntget(path->mnt);
|
||||||
|
nd->last_type = LAST_BIND;
|
||||||
cookie = dentry->d_inode->i_op->follow_link(dentry, nd);
|
cookie = dentry->d_inode->i_op->follow_link(dentry, nd);
|
||||||
error = PTR_ERR(cookie);
|
error = PTR_ERR(cookie);
|
||||||
if (!IS_ERR(cookie)) {
|
if (!IS_ERR(cookie)) {
|
||||||
|
|
|
@ -1419,7 +1419,6 @@ static void *proc_pid_follow_link(struct dentry *dentry, struct nameidata *nd)
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
error = PROC_I(inode)->op.proc_get_link(inode, &nd->path);
|
error = PROC_I(inode)->op.proc_get_link(inode, &nd->path);
|
||||||
nd->last_type = LAST_BIND;
|
|
||||||
out:
|
out:
|
||||||
return ERR_PTR(error);
|
return ERR_PTR(error);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue