mirror of
https://github.com/torvalds/linux.git
synced 2026-10-22 23:01:49 +02:00
pid: use READ_ONCE() in pid_alive()
KCSAN reports pid_alive() reading task->thread_pid while it gets cleared under tasklist_lock. The check only cares about NULL, so READ_ONCE() and WRITE_ONCE() are enough. Reported-by: syzbot+c382ee653fd70f5cf1bb@syzkaller.appspotmail.com Closes: https://syzkaller.appspot.com/bug?extid=c382ee653fd70f5cf1bb Signed-off-by: Babanpreet Singh <bbnpreetsingh@gmail.com> Link: https://patch.msgid.link/20261002012141.7-1-bbnpreetsingh@gmail.com Acked-by: Oleg Nesterov <oleg@redhat.com> Reviewed-by: Bradley Morgan <brads@mainlining.org> Signed-off-by: Christian Brauner (Amutable) <brauner@kernel.org>
This commit is contained in:
parent
2ec5a07094
commit
12e19bba68
|
|
@ -273,7 +273,7 @@ static inline pid_t task_tgid_nr(struct task_struct *tsk)
|
|||
*/
|
||||
static inline int pid_alive(const struct task_struct *p)
|
||||
{
|
||||
return p->thread_pid != NULL;
|
||||
return READ_ONCE(p->thread_pid) != NULL;
|
||||
}
|
||||
|
||||
static inline pid_t task_pgrp_nr_ns(struct task_struct *tsk, struct pid_namespace *ns)
|
||||
|
|
|
|||
|
|
@ -411,7 +411,7 @@ static void __change_pid(struct pid **pids, struct task_struct *task,
|
|||
pid = *pid_ptr;
|
||||
|
||||
hlist_del_rcu(&task->pid_links[type]);
|
||||
*pid_ptr = new;
|
||||
WRITE_ONCE(*pid_ptr, new);
|
||||
|
||||
for (tmp = PIDTYPE_MAX; --tmp >= 0; )
|
||||
if (pid_has_task(pid, tmp))
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user