]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
signal: Provide ignored_posix_timers list
authorThomas Gleixner <tglx@linutronix.de>
Tue, 5 Nov 2024 08:14:49 +0000 (09:14 +0100)
committerThomas Gleixner <tglx@linutronix.de>
Thu, 7 Nov 2024 01:14:45 +0000 (02:14 +0100)
To prepare for handling posix timer signals on sigaction(SIG_IGN) properly,
add a list to task::signal.

This list will be used to queue posix timers so their signal can be
requeued when SIG_IGN is lifted later.

Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Reviewed-by: Frederic Weisbecker <frederic@kernel.org>
Acked-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Link: https://lore.kernel.org/all/20241105064213.920101900@linutronix.de
include/linux/sched/signal.h
init/init_task.c
kernel/fork.c

index 02972fd41931e59133d5f4d81a7a93f91b7e2407..d5d03d919df811caffff34462e452a2d3d8bf6a6 100644 (file)
@@ -138,6 +138,7 @@ struct signal_struct {
        /* POSIX.1b Interval Timers */
        unsigned int            next_posix_timer_id;
        struct hlist_head       posix_timers;
+       struct hlist_head       ignored_posix_timers;
 
        /* ITIMER_REAL timer for the process */
        struct hrtimer real_timer;
index 136a8231355ab78374ecbe031b14430ca1865de0..e557f622bd90615978c3c1f890cfcaadee523691 100644 (file)
@@ -30,8 +30,9 @@ static struct signal_struct init_signals = {
        .cred_guard_mutex = __MUTEX_INITIALIZER(init_signals.cred_guard_mutex),
        .exec_update_lock = __RWSEM_INITIALIZER(init_signals.exec_update_lock),
 #ifdef CONFIG_POSIX_TIMERS
-       .posix_timers   = HLIST_HEAD_INIT,
-       .cputimer       = {
+       .posix_timers           = HLIST_HEAD_INIT,
+       .ignored_posix_timers   = HLIST_HEAD_INIT,
+       .cputimer               = {
                .cputime_atomic = INIT_CPUTIME_ATOMIC,
        },
 #endif
index 60c0b4868fd4993920f7a615a47f7e915b9a47b5..c2bd8367a850ec55f78b46877152768f90e76fd3 100644 (file)
@@ -1864,6 +1864,7 @@ static int copy_signal(unsigned long clone_flags, struct task_struct *tsk)
 
 #ifdef CONFIG_POSIX_TIMERS
        INIT_HLIST_HEAD(&sig->posix_timers);
+       INIT_HLIST_HEAD(&sig->ignored_posix_timers);
        hrtimer_init(&sig->real_timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL);
        sig->real_timer.function = it_real_fn;
 #endif