mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-12-15 23:14:31 +08:00
pid: implement ns_of_pid
A current problem with the pid namespace is that it is easy to do pid related work after exit_task_namespaces which drops the nsproxy pointer. However if we are doing pid namespace related work we are always operating on some struct pid which retains the pid_namespace pointer of the pid namespace it was allocated in. So provide ns_of_pid which allows us to find the pid namespace a pid was allocated in. Using this we have the needed infrastructure to do pid namespace related work at anytime we have a struct pid, removing the chance of accidentally having a NULL pointer dereference when accessing current->nsproxy. Signed-off-by: Eric W. Biederman <ebiederm@xmission.com> Signed-off-by: Sukadev Bhattiprolu <sukadev@linux.vnet.ibm.com> Cc: Oleg Nesterov <oleg@redhat.com> Cc: Roland McGrath <roland@redhat.com> Cc: Bastian Blank <bastian@waldi.eu.org> Cc: Pavel Emelyanov <xemul@openvz.org> Cc: Nadia Derbey <Nadia.Derbey@bull.net> Acked-by: Serge Hallyn <serue@us.ibm.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
6af866af34
commit
f9fb860f67
@ -122,6 +122,24 @@ int next_pidmap(struct pid_namespace *pid_ns, int last);
|
||||
extern struct pid *alloc_pid(struct pid_namespace *ns);
|
||||
extern void free_pid(struct pid *pid);
|
||||
|
||||
/*
|
||||
* ns_of_pid() returns the pid namespace in which the specified pid was
|
||||
* allocated.
|
||||
*
|
||||
* NOTE:
|
||||
* ns_of_pid() is expected to be called for a process (task) that has
|
||||
* an attached 'struct pid' (see attach_pid(), detach_pid()) i.e @pid
|
||||
* is expected to be non-NULL. If @pid is NULL, caller should handle
|
||||
* the resulting NULL pid-ns.
|
||||
*/
|
||||
static inline struct pid_namespace *ns_of_pid(struct pid *pid)
|
||||
{
|
||||
struct pid_namespace *ns = NULL;
|
||||
if (pid)
|
||||
ns = pid->numbers[pid->level].ns;
|
||||
return ns;
|
||||
}
|
||||
|
||||
/*
|
||||
* the helpers to get the pid's id seen from different namespaces
|
||||
*
|
||||
|
Loading…
Reference in New Issue
Block a user