Skip to content
  • Christian Brauner's avatar
    pidfd: check pid has attached task in fdinfo · 3d6d8da4
    Christian Brauner authored
    
    
    Currently, when a task is dead we still print the pid it used to use in
    the fdinfo files of its pidfds. This doesn't make much sense since the
    pid may have already been reused. So verify that the task is still alive
    by introducing the pid_has_task() helper which will be used by other
    callers in follow-up patches.
    If the task is not alive anymore, we will print -1. This allows us to
    differentiate between a task not being present in a given pid namespace
    - in which case we already print 0 - and a task having been reaped.
    
    Note that this uses PIDTYPE_PID for the check. Technically, we could've
    checked PIDTYPE_TGID since pidfds currently only refer to thread-group
    leaders but if they won't anymore in the future then this check becomes
    problematic without it being immediately obvious to non-experts imho. If
    a thread is created via clone(CLONE_THREAD) than struct pid has a single
    non-empty list pid->tasks[PIDTYPE_PID] and this pid can't be used as a
    PIDTYPE_TGID meaning pid->tasks[PIDTYPE_TGID] will return NULL even
    though the thread-group leader might still be very much alive. So
    checking PIDTYPE_PID is fine and is easier to maintain should we ever
    allow pidfds to refer to threads.
    
    Cc: Jann Horn <jannh@google.com>
    Cc: Christian Kellner <christian@kellner.me>
    Cc: linux-api@vger.kernel.org
    Signed-off-by: default avatarChristian Brauner <christian.brauner@ubuntu.com>
    Reviewed-by: default avatarOleg Nesterov <oleg@redhat.com>
    Link: https://lore.kernel.org/r/20191017101832.5985-1-christian.brauner@ubuntu.com
    3d6d8da4