On Mon, Oct 24, 2016 at 02:02:32PM +0200, Oleg Nesterov wrote: > Perhaps. Or into task_tgid(). Or even the patch below, __task_pid_nr_ns() > is always safe. This certainly needs some cleanups.
> --- x/include/linux/pid.h > +++ x/include/linux/pid.h > @@ -8,7 +8,8 @@ enum pid_type > PIDTYPE_PID, > PIDTYPE_PGID, > PIDTYPE_SID, > - PIDTYPE_MAX > + PIDTYPE_MAX, > + PIDTYPE_TGID /* do not use */ > }; > > /* > --- x/kernel/pid.c > +++ x/kernel/pid.c > @@ -538,7 +538,7 @@ EXPORT_SYMBOL(__task_pid_nr_ns); > > pid_t task_tgid_nr_ns(struct task_struct *tsk, struct pid_namespace *ns) > { > - return pid_nr_ns(task_tgid(tsk), ns); > + return __task_pid_nr_ns(tsk, PIDTYPE_TGID, ns); > } > EXPORT_SYMBOL(task_tgid_nr_ns); > > Right, that will return 0 on !alive. But I'm not seeing how PIDTYPE_TGID isn't an array bound violating of its own though. Then again, I didn't look to hard at the pid stuff.