All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Eric W. Biederman" <ebiederm@xmission.com>
To: Oleg Nesterov <oleg@redhat.com>
Cc: Andrew Morton <akpm@linux-foundation.org>,
	 Andy Lutomirski <luto@kernel.org>,  Kees Cook <kees@kernel.org>,
	 Kusaram Devineni <kusaram@devineni.in>,
	 Peter Zijlstra <peterz@infradead.org>,
	 Thomas Gleixner <tglx@kernel.org>,
	 Will Drewry <wad@chromium.org>,
	linux-kernel@vger.kernel.org,
	 Linus Torvalds <torvalds@linux-foundation.org>,
	 Christian Brauner <brauner@kernel.org>
Subject: [PATCH 01/14] signal: Generalize posixtimer_queue_sigqueue into enqueue_signal
Date: Fri, 03 Jul 2026 16:36:49 -0500	[thread overview]
Message-ID: <871pdj4uxa.fsf_-_@email.froward.int.ebiederm.org> (raw)
In-Reply-To: <877bnb4uyw.fsf_-_@email.froward.int.ebiederm.org> (Eric W. Biederman's message of "Fri, 03 Jul 2026 16:35:51 -0500")


send_signal needs to do all of the same work as
posixtimer_queue_sigqueue before calling complete_signal.  The only
difference is that send_signal might not allocate a sigqueue.

So generalize the code to handle an absent sigqueue and create
enqueue_signal.  Then use enqueue_signal in place of
posixtimer_queue_sigqueue and complete_signal.

Signed-off-by: Eric W. Biederman <ebiederm@xmission.com>
---
 kernel/signal.c | 37 ++++++++++++++++++-------------------
 1 file changed, 18 insertions(+), 19 deletions(-)

diff --git a/kernel/signal.c b/kernel/signal.c
index 9c2b32c4d755..6b49bae3fce7 100644
--- a/kernel/signal.c
+++ b/kernel/signal.c
@@ -1032,6 +1032,21 @@ static void complete_signal(int sig, struct task_struct *p, enum pid_type type)
 	return;
 }
 
+static void enqueue_signal(struct task_struct *t, enum pid_type type,
+			   int sig, struct sigqueue *q)
+{
+	struct signal_struct *signal = t->signal;
+	struct sigpending *pending = (type != PIDTYPE_PID) ?
+		&signal->shared_pending : &t->pending;
+
+	signalfd_notify(t, sig);
+	if (q) {
+		list_add_tail(&q->list, &pending->list);
+	}
+	sigaddset(&pending->signal, sig);
+	complete_signal(sig, t, type);
+}
+
 static inline bool legacy_queue(struct sigpending *signals, int sig)
 {
 	return (sig < SIGRTMIN) && sigismember(&signals->signal, sig);
@@ -1085,7 +1100,6 @@ static int __send_signal_locked(int sig, struct kernel_siginfo *info,
 	q = sigqueue_alloc(sig, t, GFP_ATOMIC, override_rlimit);
 
 	if (q) {
-		list_add_tail(&q->list, &pending->list);
 		switch ((unsigned long) info) {
 		case (unsigned long) SEND_SIG_NOINFO:
 			clear_siginfo(&q->info);
@@ -1131,9 +1145,6 @@ static int __send_signal_locked(int sig, struct kernel_siginfo *info,
 	}
 
 out_set:
-	signalfd_notify(t, sig);
-	sigaddset(&pending->signal, sig);
-
 	/* Let multiprocess signals appear after on-going forks */
 	if (type > PIDTYPE_TGID) {
 		struct multiprocess_signals *delayed;
@@ -1148,7 +1159,7 @@ static int __send_signal_locked(int sig, struct kernel_siginfo *info,
 		}
 	}
 
-	complete_signal(sig, t, type);
+	enqueue_signal(t, type, sig, q);
 ret:
 	trace_signal_generate(sig, info, t, type != PIDTYPE_PID, result);
 	return ret;
@@ -1939,18 +1950,6 @@ bool posixtimer_init_sigqueue(struct sigqueue *q)
 	return true;
 }
 
-static void posixtimer_queue_sigqueue(struct sigqueue *q, struct task_struct *t, enum pid_type type)
-{
-	struct sigpending *pending;
-	int sig = q->info.si_signo;
-
-	signalfd_notify(t, sig);
-	pending = (type != PIDTYPE_PID) ? &t->signal->shared_pending : &t->pending;
-	list_add_tail(&q->list, &pending->list);
-	sigaddset(&pending->signal, sig);
-	complete_signal(sig, t, type);
-}
-
 /*
  * This function is used by POSIX timers to deliver a timer signal.
  * Where type is PIDTYPE_PID (such as for timers with SIGEV_THREAD_ID
@@ -2076,7 +2075,7 @@ void posixtimer_send_sigqueue(struct k_itimer *tmr)
 	else
 		hlist_del_init(&tmr->ignored_list);
 
-	posixtimer_queue_sigqueue(q, t, tmr->it_pid_type);
+	enqueue_signal(t, tmr->it_pid_type, sig, q);
 	result = TRACE_SIGNAL_DELIVERED;
 out:
 	trace_signal_generate(sig, &q->info, t, tmr->it_pid_type != PIDTYPE_PID, result);
@@ -2137,7 +2136,7 @@ static void posixtimer_sig_unignore(struct task_struct *tsk, int sig)
 		guard(rcu)();
 		target = posixtimer_get_target(tmr);
 		if (target)
-			posixtimer_queue_sigqueue(&tmr->sigq, target, tmr->it_pid_type);
+			enqueue_signal(target, tmr->it_pid_type, sig, &tmr->sigq);
 		else
 			posixtimer_putref(tmr);
 	}
-- 
2.41.0


  reply	other threads:[~2026-07-03 21:37 UTC|newest]

Thread overview: 62+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-06-19 13:27 [PATCH v2 1/3] signal: change force_sig_info_to_task() to call __send_signal_locked() Oleg Nesterov
2026-06-19 13:27 ` [PATCH v2 2/3] signal: turn the "bool force" arg of __send_signal_locked() into "int flags" Oleg Nesterov
2026-07-06 13:23   ` Bradley Morgan
2026-06-19 13:28 ` [PATCH v2 3/3] signal: fix evasion of SA_IMMUTABLE signals Oleg Nesterov
2026-07-06 13:23   ` Bradley Morgan
2026-06-26 16:52 ` [PATCH 0/11] Short circuit delivery for coredump signals Eric W. Biederman
2026-06-26 16:54   ` [PATCH 01/11] signal: Compute the exit_code in get_signal Eric W. Biederman
2026-06-26 16:54   ` [PATCH 02/11] signal: In get_signal call do_exit when it is unnecessary to shoot down threads Eric W. Biederman
2026-06-26 16:55   ` [PATCH 03/11] signal: Bring down all threads when handling a non-coredump fatal signal Eric W. Biederman
2026-06-26 16:55   ` [PATCH 04/11] signal: Move stopping for the coredump from do_exit into get_signal Eric W. Biederman
2026-06-26 16:56   ` [PATCH 05/11] signal: Move audit_core_dumps from do_coredump " Eric W. Biederman
2026-06-26 16:57   ` [PATCH 06/11] coredump: In zap_threads complete startup if there is no need to wait Eric W. Biederman
2026-06-26 16:57   ` [PATCH 07/11] signal: Use the thread killing in get_signal for coredumps Eric W. Biederman
2026-06-26 16:58   ` [PATCH 08/11] exit: Make do_group_exit static Eric W. Biederman
2026-06-26 16:59   ` [PATCH 09/11] signal: Dequeue fatal signals Eric W. Biederman
2026-06-26 16:59   ` [PATCH 10/11] signal: Short circuit deliver coredump signals Eric W. Biederman
2026-06-26 17:00   ` [PATCH 11/11] signal: Remove SA_IMMUTABLE Eric W. Biederman
2026-06-28 14:29   ` [PATCH 0/11] Short circuit delivery for coredump signals Oleg Nesterov
2026-06-29  6:22     ` Eric W. Biederman
2026-06-29 17:45       ` Eric W. Biederman
2026-07-02 10:36         ` Oleg Nesterov
2026-07-03 20:16           ` Eric W. Biederman
2026-07-05 15:54             ` Oleg Nesterov
2026-07-06  9:21               ` Christian Brauner
2026-07-06 12:30                 ` Eric W. Biederman
2026-07-06 15:58                   ` Christian Brauner
2026-07-03 21:35       ` [PATCH v2 00/14] " Eric W. Biederman
2026-07-03 21:36         ` Eric W. Biederman [this message]
2026-07-06 12:54           ` [PATCH 01/14] signal: Generalize posixtimer_queue_sigqueue into enqueue_signal Bradley Morgan
2026-07-07 11:21           ` Oleg Nesterov
2026-07-07 12:23             ` Eric W. Biederman
2026-07-03 21:37         ` [PATCH 02/14] signal: Factor out sig_blocked from sig_ignored Eric W. Biederman
2026-07-06 13:01           ` Bradley Morgan
2026-07-03 21:37         ` [PATCH 03/14] signal: More accurate ignoring of signals based on sig_can_short_circuit Eric W. Biederman
2026-07-06 13:02           ` Bradley Morgan
2026-07-03 21:38         ` [PATCH 04/14] signal: Use sig_can_short_circuit to improve fatal signal delivery Eric W. Biederman
2026-07-06 13:03           ` Bradley Morgan
2026-07-03 21:39         ` [PATCH 05/14] signal: Compute the exit_code in get_signal Eric W. Biederman
2026-07-06 13:03           ` Bradley Morgan
2026-07-03 21:39         ` Eric W. Biederman
2026-07-03 21:40         ` [PATCH 06/14] signal: In get_signal call do_exit when it is unnecessary to shoot down threads Eric W. Biederman
2026-07-06 13:04           ` Bradley Morgan
2026-07-03 21:40         ` [PATCH 07/14] signal: Bring down all threads when handling a non-coredump fatal signal Eric W. Biederman
2026-07-06 13:05           ` Bradley Morgan
2026-07-03 21:41         ` [PATCH 08/14] signal: Move stopping for the coredump from do_exit into get_signal Eric W. Biederman
2026-07-06 13:08           ` Bradley Morgan
2026-07-03 21:41         ` [PATCH 09/14] signal: Move audit_core_dumps from do_coredump " Eric W. Biederman
2026-07-06 13:08           ` Bradley Morgan
2026-07-03 21:42         ` [PATCH 10/14] coredump: In zap_threads complete startup if there is no need to wait Eric W. Biederman
2026-07-06 13:09           ` Bradley Morgan
2026-07-03 21:43         ` [PATCH 11/14] signal: Use the thread killing in get_signal for coredumps Eric W. Biederman
2026-07-06 13:13           ` Bradley Morgan
2026-07-03 21:43         ` [PATCH 12/14] exit: Make do_group_exit static Eric W. Biederman
2026-07-06 13:14           ` Bradley Morgan
2026-07-03 21:44         ` [PATCH 13/14] signal: Dequeue fatal signals Eric W. Biederman
2026-07-06 13:16           ` Bradley Morgan
2026-07-03 21:44         ` [PATCH 14/14] signal: Short circuit deliver coredump signals Eric W. Biederman
2026-07-06 13:17           ` Bradley Morgan
2026-07-07 11:13         ` [PATCH v2 00/14] Short circuit delivery for " Oleg Nesterov
2026-07-07 12:15           ` Oleg Nesterov
2026-07-06 13:18     ` [PATCH 0/11] " Bradley Morgan
2026-07-06 13:23 ` [PATCH v2 1/3] signal: change force_sig_info_to_task() to call __send_signal_locked() Bradley Morgan

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=871pdj4uxa.fsf_-_@email.froward.int.ebiederm.org \
    --to=ebiederm@xmission.com \
    --cc=akpm@linux-foundation.org \
    --cc=brauner@kernel.org \
    --cc=kees@kernel.org \
    --cc=kusaram@devineni.in \
    --cc=linux-kernel@vger.kernel.org \
    --cc=luto@kernel.org \
    --cc=oleg@redhat.com \
    --cc=peterz@infradead.org \
    --cc=tglx@kernel.org \
    --cc=torvalds@linux-foundation.org \
    --cc=wad@chromium.org \
    /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.