On 2017-09-17 19:53, Andrei Vagin wrote: > It was added a long time ago, when a container was executed in a host > mount namespace. Now ve->root_path is used only in one place > follow_dotdot(), but event there it looks useless, if we run a container > in a separate mount namespace. > > ve->root_path can holds a mount tree and now it is impossible to umount > it, when a container changes its root (pivot_root()) > > https://jira.sw.ru/browse/PSBM-71414 > Reported-by: Vasily Averin <v...@virtuozzo.com> > Cc: Vasily Averin <v...@virtuozzo.com> > Signed-off-by: Andrei Vagin <ava...@openvz.org>
Reviewed-by: Vasily Averin <v...@virtuozzo.com> > --- > fs/namei.c | 6 ------ > include/linux/ve.h | 3 --- > kernel/ve/ve.c | 4 ---- > kernel/ve/veowner.c | 11 ----------- > 4 files changed, 24 deletions(-) > > diff --git a/fs/namei.c b/fs/namei.c > index 4dac2e6..14f17ec 100644 > --- a/fs/namei.c > +++ b/fs/namei.c > @@ -1298,12 +1298,6 @@ static int follow_dotdot(struct nameidata *nd) > nd->path.mnt == nd->root.mnt) { > break; > } > -#ifdef CONFIG_VE > - if (nd->path.dentry == get_exec_env()->root_path.dentry && > - nd->path.mnt == get_exec_env()->root_path.mnt) { > - break; > - } > -#endif > if (nd->path.dentry != nd->path.mnt->mnt_root) { > /* rare case of legitimate dget_parent()... */ > nd->path.dentry = dget_parent(nd->path.dentry); > diff --git a/include/linux/ve.h b/include/linux/ve.h > index d63edee..7999746 100644 > --- a/include/linux/ve.h > +++ b/include/linux/ve.h > @@ -56,9 +56,6 @@ struct ve_struct { > struct task_struct *ve_umh_task; > struct kthread_worker ve_umh_worker; > > -/* VE's root */ > - struct path root_path; > - > struct super_block *dev_sb; > struct super_block *devpts_sb; > > diff --git a/kernel/ve/ve.c b/kernel/ve/ve.c > index 0a835f3..b0188c3 100644 > --- a/kernel/ve/ve.c > +++ b/kernel/ve/ve.c > @@ -436,16 +436,12 @@ static void ve_grab_context(struct ve_struct *ve) > ve->init_cred = (struct cred *)get_current_cred(); > rcu_assign_pointer(ve->ve_ns, get_nsproxy(tsk->nsproxy)); > ve->ve_netns = get_net(ve->ve_ns->net_ns); > - get_fs_root(tsk->fs, &ve->root_path); > synchronize_rcu(); > } > > static void ve_drop_context(struct ve_struct *ve) > { > struct nsproxy *ve_ns = ve->ve_ns; > - path_put(&ve->root_path); > - ve->root_path.mnt = NULL; > - ve->root_path.dentry = NULL; > > put_net(ve->ve_netns); > ve->ve_netns = NULL; > diff --git a/kernel/ve/veowner.c b/kernel/ve/veowner.c > index a7fe9cc..bb2b6fb 100644 > --- a/kernel/ve/veowner.c > +++ b/kernel/ve/veowner.c > @@ -124,17 +124,6 @@ static void prepare_sysctl(void) > > void init_ve_system(void) > { > - struct task_struct *init_entry; > - struct ve_struct *ve; > - struct path root; > - > - ve = get_ve0(); > - > - init_entry = init_pid_ns.child_reaper; > - > - get_fs_root(init_entry->fs, &root); > - ve->root_path = root; > - > #ifdef CONFIG_PROC_FS > prepare_proc(); > #endif > _______________________________________________ Devel mailing list Devel@openvz.org https://lists.openvz.org/mailman/listinfo/devel