|
@@ -118,7 +118,7 @@ static void *proc_ns_follow_link(struct dentry *dentry, struct nameidata *nd)
|
|
|
struct super_block *sb = inode->i_sb;
|
|
|
struct proc_inode *ei = PROC_I(inode);
|
|
|
struct task_struct *task;
|
|
|
- struct dentry *ns_dentry;
|
|
|
+ struct path ns_path;
|
|
|
void *error = ERR_PTR(-EACCES);
|
|
|
|
|
|
task = get_proc_task(inode);
|
|
@@ -128,14 +128,14 @@ static void *proc_ns_follow_link(struct dentry *dentry, struct nameidata *nd)
|
|
|
if (!ptrace_may_access(task, PTRACE_MODE_READ))
|
|
|
goto out_put_task;
|
|
|
|
|
|
- ns_dentry = proc_ns_get_dentry(sb, task, ei->ns_ops);
|
|
|
- if (IS_ERR(ns_dentry)) {
|
|
|
- error = ERR_CAST(ns_dentry);
|
|
|
+ ns_path.dentry = proc_ns_get_dentry(sb, task, ei->ns_ops);
|
|
|
+ if (IS_ERR(ns_path.dentry)) {
|
|
|
+ error = ERR_CAST(ns_path.dentry);
|
|
|
goto out_put_task;
|
|
|
}
|
|
|
|
|
|
- dput(nd->path.dentry);
|
|
|
- nd->path.dentry = ns_dentry;
|
|
|
+ ns_path.mnt = mntget(nd->path.mnt);
|
|
|
+ nd_jump_link(nd, &ns_path);
|
|
|
error = NULL;
|
|
|
|
|
|
out_put_task:
|