mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
* [PATCH] pid: document that do_each_pid_task() needs tasklist_lock
@ 2026-10-11 14:16 Oleg Nesterov
  2026-10-12  8:40 ` Christian Brauner
  2026-10-12 12:54 ` David Laight
  0 siblings, 2 replies; 3+ messages in thread
From: Oleg Nesterov @ 2026-10-11 14:16 UTC (permalink / raw)
  To: Andrew Morton; +Cc: Christian Brauner, David Laight, Mingyu Wang, linux-kernel

do_each_pid_task() looks "obviously rcu-safe". This confuses people
and we already have 2 buggy users: send_sigio() and send_sigurg().

The reasons why it is not are not obvious at all, add the comment.

Signed-off-by: Oleg Nesterov <oleg@redhat.com>
---
 include/linux/pid.h | 9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/include/linux/pid.h b/include/linux/pid.h
index ddaef0bbc8ba..f5476d7140a3 100644
--- a/include/linux/pid.h
+++ b/include/linux/pid.h
@@ -187,6 +187,15 @@ static inline pid_t pid_nr(struct pid *pid)
 pid_t pid_nr_ns(struct pid *pid, struct pid_namespace *ns);
 pid_t pid_vnr(struct pid *pid);
 
+/*
+ * Needs tasklist_lock if type > PIDTYPE_TGID. A lockless reader can:
+ *
+ * - race with a change_pid() that moves the task to another hlist,
+ *   and continue to scan the wrong list.
+ *
+ * - race with a copy_process() that adds a new task to the start of hlist,
+ *   and miss the new child.
+ */
 #define do_each_pid_task(pid, type, task)				\
 	do {								\
 		if ((pid) != NULL)					\
-- 
2.55.0



^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2026-10-12 12:54 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-10-11 14:16 [PATCH] pid: document that do_each_pid_task() needs tasklist_lock Oleg Nesterov
2026-10-12  8:40 ` Christian Brauner
2026-10-12 12:54 ` David Laight

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®