All of lore.kernel.org
 help / color / mirror / Atom feed
From: Thomas Gleixner <tglx@kernel.org>
To: LKML <linux-kernel@vger.kernel.org>
Cc: Hyunwoo Kim <imv4bel@gmail.com>, Oleg Nesterov <oleg@redhat.com>,
	Frederic Weisbecker <frederic@kernel.org>,
	Christian Brauner <brauner@kernel.org>,
	Peter Zijlstra <peterz@infradead.org>,
	John Stultz <jstultz@google.com>, Ingo Molnar <mingo@kernel.org>,
	Alexander Viro <viro@zeniv.linux.org.uk>,
	"Eric W. Biederman" <ebiederm@xmission.com>,
	Alan Stern <stern@rowland.harvard.edu>
Subject: [patch V3 7/8] posix-cpu-timers: Prevent enqueueing when PF_EXITING is set
Date: Fri, 11 Sep 2026 11:09:40 +0200	[thread overview]
Message-ID: <20260911090541.892445443@kernel.org> (raw)
In-Reply-To: 20260911090341.949101445@kernel.org

From: Thomas Gleixner <tglx@kernel.org>

To prepare for cleaning up POSIX CPU timers in do_exit(), prevent
enqueueing POSIX CPU timers on a task which has PF_EXITING set.  Queueing a
timer on such a task is pointless because the task won't expire the timer
anymore.

The same applies to process wide timers when tsk::signal::flags has
SIGNAL_GROUP_EXIT set.

Pretending that the timer is armed allows to keep the POSIX timer mechanism
"working" so that the timer stays accessible up to the point where a task
is unhashed.

Signed-off-by: Thomas Gleixner <tglx@kernel.org>
Reviewed-by: Oleg Nesterov <oleg@redhat.com>

---
 kernel/time/posix-cpu-timers.c |   28 ++++++++++++++++++++++++++++
 1 file changed, 28 insertions(+)
--- a/kernel/time/posix-cpu-timers.c
+++ b/kernel/time/posix-cpu-timers.c
@@ -628,6 +628,7 @@ static int posix_cpu_timer_del(struct k_
 	}
 
 	if (!ret) {
+		WARN_ON_ONCE(cpu_timer_queued(&timer->it.cpu));
 		put_pid(timer->it.cpu.pid);
 		timer->it_status = POSIX_TIMER_DISARMED;
 	}
@@ -675,6 +676,27 @@ void posix_cpu_timers_exit_group(struct
 }
 
 /*
+ * This function validates that POSIX CPU timers can be safely enqueued on the
+ * target task.
+ *
+ * Enqueue is allowed when PF_EXITING is not set. If set then it is only allowed
+ * for process shared timers (type = PIDTYPE_TGID) as long as tsk::signal::flags
+ * does not have SIGNAL_GROUP_EXIT set. PIDTYPE_PID targets are not allowed at
+ * all when the task has PF_EXITING set.
+ *
+ * This guarantees that after the POSIX timer cleanup in posixtimer_exit() no
+ * POSIX CPU timers are queued on the task or in case of a group exit on the
+ * process.
+ */
+static inline bool task_can_enqueue_timer(struct task_struct *tsk, enum pid_type type)
+{
+	if (likely(!(tsk->flags & PF_EXITING)))
+		return true;
+
+	return type == PIDTYPE_TGID && !(tsk->signal->flags & SIGNAL_GROUP_EXIT);
+}
+
+/*
  * Insert the timer on the appropriate list before any timers that
  * expire later.  This must be called with the sighand lock held.
  */
@@ -684,7 +706,13 @@ static void arm_timer(struct k_itimer *t
 	struct cpu_timer *ctmr = &timer->it.cpu;
 	u64 newexp = cpu_timer_getexpires(ctmr);
 
+	lockdep_assert_held(&p->sighand->siglock);
+
 	timer->it_status = POSIX_TIMER_ARMED;
+
+	if (unlikely(!task_can_enqueue_timer(p, clock_pid_type(timer->it_clock))))
+		return;
+
 	if (!cpu_timer_enqueue(&base->tqhead, ctmr))
 		return;
 




  parent reply	other threads:[~2026-09-11  9:09 UTC|newest]

Thread overview: 31+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-09-11  9:09 [patch V3 0/8] exec/exit: POSIX timer related bugfixes and related cleanups Thomas Gleixner
2026-09-11  9:09 ` [patch V3 1/8] signal: Prevent exec() race Thomas Gleixner
2026-09-11 13:08   ` Frederic Weisbecker
2026-09-16 16:48   ` [tip: timers/core] " tip-bot2 for Thomas Gleixner
2026-09-16 20:37   ` [patch V3 1/8] " Andrea Parri
2026-09-11  9:09 ` [patch V3 2/8] exec: Cleanup POSIX timers right after de_thread() Thomas Gleixner
2026-09-16 16:48   ` [tip: timers/core] " tip-bot2 for Hyunwoo Kim
2026-09-11  9:09 ` [patch V3 3/8] posix-timers: Move posixtimer_exec_cleanup() out of exec.c Thomas Gleixner
2026-09-11 13:58   ` Oleg Nesterov
2026-09-16 16:48   ` [tip: timers/core] " tip-bot2 for Thomas Gleixner
2026-09-16 20:31   ` [patch V3 3/8] " Andrea Parri
2026-09-11  9:09 ` [patch V3 4/8] posix-timers: Move POSIX timer group exit related code out of do_exit() Thomas Gleixner
2026-09-11 13:59   ` Oleg Nesterov
2026-09-16 16:48   ` [tip: timers/core] " tip-bot2 for Thomas Gleixner
2026-09-11  9:09 ` [patch V3 5/8] posix-cpu-timers: Move inlines out of public header Thomas Gleixner
2026-09-11 13:59   ` Oleg Nesterov
2026-09-16 16:48   ` [tip: timers/core] " tip-bot2 for Thomas Gleixner
2026-09-11  9:09 ` [patch V3 6/8] posix-cpu-timers: Use PF_EXITING to indicate exit Thomas Gleixner
2026-09-11 13:15   ` Frederic Weisbecker
2026-09-11 14:00   ` Oleg Nesterov
2026-09-16 16:48   ` [tip: timers/core] " tip-bot2 for Thomas Gleixner
2026-09-16 20:21   ` [patch V3 6/8] " Andrea Parri
2026-09-11  9:09 ` Thomas Gleixner [this message]
2026-09-12 21:09   ` [patch V3 7/8] posix-cpu-timers: Prevent enqueueing when PF_EXITING is set Frederic Weisbecker
2026-09-16 16:48   ` [tip: timers/core] " tip-bot2 for Thomas Gleixner
2026-09-11  9:09 ` [patch V3 8/8] posix-timers: Handle exit in do_exit() completely Thomas Gleixner
2026-09-11 14:02   ` Oleg Nesterov
2026-09-12 22:17   ` Frederic Weisbecker
2026-09-16 16:48   ` [tip: timers/core] " tip-bot2 for Thomas Gleixner
2026-09-16 20:12   ` [patch V3 8/8] " Andrea Parri
2026-09-12 14:20 ` [patch V3 0/8] exec/exit: POSIX timer related bugfixes and related cleanups Kijo Park

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20260911090541.892445443@kernel.org \
    --to=tglx@kernel.org \
    --cc=brauner@kernel.org \
    --cc=ebiederm@xmission.com \
    --cc=frederic@kernel.org \
    --cc=imv4bel@gmail.com \
    --cc=jstultz@google.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@kernel.org \
    --cc=oleg@redhat.com \
    --cc=peterz@infradead.org \
    --cc=stern@rowland.harvard.edu \
    --cc=viro@zeniv.linux.org.uk \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.