On 02/05, Ian Kent wrote: > > +int umh_enter_ns(struct task_struct *tsk, struct cred *new) > +{ > + char path[NS_PATH_MAX]; > + struct vfsmount *mnt; > + const char *name; > + pid_t pid; > + int err = 0; > + > + pid = task_pid_nr(tsk); > + > + /* > + * The user mode thread runner runs in the root init namespace > + * so it will see all system pids. > + */ > + mnt = task_active_pid_ns(current)->proc_mnt; > + > + for (name = ns_names[0]; *name; name++) { > + struct file *this; > + int len; > + > + len = snprintf(path, > + NS_PATH_MAX, NS_PATH_FMT, > + (unsigned long) pid, name); > + if (len >= NS_PATH_MAX) { > + err = -ENAMETOOLONG; > + break; > + } > + > + this = file_open_root(mnt->mnt_root, mnt, path, O_RDONLY); > + if (unlikely(IS_ERR(this))) { > + err = PTR_ERR(this); > + break; > + } > + > + err = setns_inode(file_inode(this), 0); > + fput(this); > + if (err) > + break; > + } > + > + return err; > +}
Yes, I need to actually read this series and setns paths, but at first glance there must be a simpler method to call ops->install's and switch_task_namespaces. Sorry if this was already discussed before, but to me it looks a bit strange to abuse /proc/ files for this. And again, iiuc file_open_root() can fail if tsk has already exited (init can be multithreaded). Oleg. -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/