All of lore.kernel.org
 help / color / mirror / Atom feed
From: Hyunwoo Kim <imv4bel@gmail.com>
To: viro@zeniv.linux.org.uk, brauner@kernel.org, tglx@kernel.org,
	ebiederm@xmission.com
Cc: linux-fsdevel@vger.kernel.org, linux-mm@kvack.org,
	linux-kernel@vger.kernel.org, imv4bel@gmail.com
Subject: Re: [PATCH] posix-cpu-timers: Dequeue per-thread timers before exchange_tids()
Date: Fri, 14 Aug 2026 21:01:47 +0900	[thread overview]
Message-ID: <an8Dq_XUMobC395V@v4bel> (raw)
In-Reply-To: <anfgrsPlUdwBhdrp@v4bel>

On Sun, Aug 09, 2026 at 11:06:38AM +0900, Hyunwoo Kim wrote:
> A per-thread CPU timer holds a reference to the PID of the thread it is
> attached to and, while it is armed, its node is queued in that thread's
> posix_cputimers. The task is looked up by that PID.
> 
> When a non-leader thread exec()s, de_thread() changes which task owns
> that PID:
> 
>   de_thread(tsk)
>     exchange_tids(tsk, leader);		// tsk's PID now belongs to leader
>     ...
>     release_task(leader)
>       __exit_signal(leader)
>         posix_cpu_timers_exit(leader);	// cleans leader's queue, not tsk's
>         __unhash_process(leader)	// that PID has no task anymore
> 
> pid_task(timer->it.cpu.pid, PIDTYPE_PID) then returns NULL, but the node
> is still queued on tsk, which is alive. timer_lock_sighand() takes a
> failed lookup to mean that the node is already dequeued, so it has
> nothing to undo.
> 
> begin_new_exec() calls posix_cpu_timers_exit(me) right after
> exec_task_namespaces() and that removes the leftover node, so the state
> normally stays invisible. But bprm->point_of_no_return is set before
> de_thread(), so if unshare_files(), set_mm_exe_file(), exec_mmap() or
> exec_task_namespaces() fails, the task dies before it gets there.
> exit_itimers() then frees the k_itimer while its node is still queued,
> and reaping tsk later erases that freed node from the rbtree.
> 
> Dequeue the per-thread CPU timers of tsk before the PID changes hands, so
> that a failed lookup again implies a dequeued node. Process-wide timers
> are looked up with PIDTYPE_TGID and transfer_pid() moves that link to
> tsk, so they are left alone.
> 
> Fixes: 55e8c8eb2c7b ("posix-cpu-timers: Store a reference to a pid not a task")
> Cc: stable@vger.kernel.org
> Signed-off-by: Hyunwoo Kim <imv4bel@gmail.com>
> ---
>  fs/exec.c | 12 ++++++++++++
>  1 file changed, 12 insertions(+)
> 
> diff --git a/fs/exec.c b/fs/exec.c
> index c7b8f2d6366c44..f80f70e1c26de4 100644
> --- a/fs/exec.c
> +++ b/fs/exec.c
> @@ -1000,6 +1000,18 @@ static int de_thread(struct task_struct *tsk)
>  		 * the former thread group leader:
>  		 */
>  
> +#ifdef CONFIG_POSIX_TIMERS
> +		/*
> +		 * exchange_tids() hands this thread's PID to the old leader,
> +		 * which is reaped right after. The PID lookup in
> +		 * timer_lock_sighand() then fails while the per thread CPU
> +		 * timers are still queued here, so dequeue them first.
> +		 */
> +		spin_lock(lock);
> +		posix_cpu_timers_exit(tsk);
> +		spin_unlock(lock);
> +#endif
> +
>  		/* Become a process group leader with the old leader's pid.
>  		 * The old leader becomes a thread of the this thread group.
>  		 */
> -- 
> 2.43.0
> 

Gentle ping. Any feedback on this patch would be appreciated.


Best regards,
Hyunwoo Kim

      reply	other threads:[~2026-08-14 12:01 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-08-09  2:06 [PATCH] posix-cpu-timers: Dequeue per-thread timers before exchange_tids() Hyunwoo Kim
2026-08-14 12:01 ` Hyunwoo Kim [this message]

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=an8Dq_XUMobC395V@v4bel \
    --to=imv4bel@gmail.com \
    --cc=brauner@kernel.org \
    --cc=ebiederm@xmission.com \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=tglx@kernel.org \
    --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.