mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-11-24 21:40:54 +07: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 struct pid *alloc_pid(struct pid_namespace *ns);
|
||||||
extern void free_pid(struct pid *pid);
|
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
|
* the helpers to get the pid's id seen from different namespaces
|
||||||
*
|
*
|
||||||
|
Loading…
Reference in New Issue
Block a user