Messages in this thread | | | Date | Sun, 8 Feb 2015 20:00:19 +0100 | From | Oleg Nesterov <> | Subject | Re: [RFC PATCH 3/8] kmod - teach call_usermodehelper() to use a namespace |
| |
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.
| |