Re: [PATCH 1/2] pidfd: verify task is alive when printing fdinfo

From: Oleg Nesterov
Date: Tue Oct 15 2019 - 10:44:04 EST


On 10/15, Christian Brauner wrote:
>
> +static inline bool task_alive(struct pid *pid)
> +{
> + bool alive = true;
> +
> + rcu_read_lock();
> + if (!pid_task(pid, PIDTYPE_PID))
> + alive = false;
> + rcu_read_unlock();
> +
> + return alive;
> +}

Well, the usage of rcu_read_lock/unlock looks confusing to me...

I mean, this helper does not need rcu lock at all. Except
rcu_dereference_check() will complain.

static inline bool task_alive(struct pid *pid)
{
bool alive;

/* shut up rcu_dereference_check() */
rcu_lock_acquire(&rcu_lock_map);
alive = !!pid_task(pid, PIDTYPE_PID));
rcu_lock_release(&rcu_lock_map);

return alive;
}

looks more clear imo.

But in fact I'd suggest to simply use !hlist_empty(&pid->tasks[PIDTYPE_PID])
in pidfd_show_fdinfo() and do not add a new helper.

Oleg.