summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKunwu Chan <kunwu.chan@gmail.com>2026-09-20 15:07:50 +0800
committerChristian Brauner <brauner@kernel.org>2026-09-25 11:33:50 +0200
commitfd00a46e36a12c5279d3d163f0d0c8f83d12dc09 (patch)
treefe5d2eaa2a43d82f7b0de75a5da9add72819ead3
parent8421a62085ec2d0be97b17ef66536344f472703e (diff)
downloadlinux-next-fd00a46e36a12c5279d3d163f0d0c8f83d12dc09.tar.gz
linux-next-fd00a46e36a12c5279d3d163f0d0c8f83d12dc09.zip
kthread: Annotate lockless to_kthread() flags access
do_exit() calls synchronize_group_exit(), which modifies task->flags under sighand->siglock: tsk->flags |= PF_POSTCOREDUMP; The sanity check in to_kthread() reads the same flags word without holding that lock: WARN_ON(!(k->flags & PF_KTHREAD)); PF_KTHREAD is set once when the task becomes a kthread and is never cleared for the lifetime of the task. Since PF_KTHREAD is immutable, the check does not depend on synchronization with updates to other bits in task->flags. Use READ_ONCE() to annotate the intentional lockless access. Signed-off-by: Kunwu Chan <kunwu.chan@gmail.com> Link: https://patch.msgid.link/20260920070750.2871923-1-kunwu.chan@gmail.com Reviewed-by: Bradley Morgan <brads@mainlining.org> Signed-off-by: Christian Brauner (Amutable) <brauner@kernel.org>
-rw-r--r--kernel/kthread.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/kernel/kthread.c b/kernel/kthread.c
index 63beb59b7a3d..af1675d89660 100644
--- a/kernel/kthread.c
+++ b/kernel/kthread.c
@@ -81,7 +81,7 @@ enum KTHREAD_BITS {
static inline struct kthread *to_kthread(struct task_struct *k)
{
- WARN_ON(!(k->flags & PF_KTHREAD));
+ WARN_ON(!(READ_ONCE(k->flags) & PF_KTHREAD));
return k->worker_private;
}