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.