42 lines
1.2 KiB
Diff
42 lines
1.2 KiB
Diff
From 4bbda92cdd0ceacc982f759d97d35b1617a8beba Mon Sep 17 00:00:00 2001
|
|
From: Samanta Navarro <ferivoz@riseup.net>
|
|
Date: Wed, 11 Jan 2023 11:57:21 +0000
|
|
Subject: [PATCH] login: never send signals to init
|
|
|
|
If the signal handler is triggered after a failed fork attempt, then
|
|
child_pid will be -1. This in turn leads to a positive test and a
|
|
subsequent call of kill(1, signal). If signal was SIGTERM, then there
|
|
will be also another kill(1, SIGHUP) call.
|
|
|
|
Test explicitly for a positive child_pid value to prevent these cases.
|
|
|
|
Signed-off-by: Samanta Navarro <ferivoz@riseup.net>
|
|
---
|
|
login-utils/login.c | 8 ++++----
|
|
1 file changed, 4 insertions(+), 4 deletions(-)
|
|
|
|
diff --git a/login-utils/login.c b/login-utils/login.c
|
|
index 2c146b977..74bdf38a4 100644
|
|
--- a/login-utils/login.c
|
|
+++ b/login-utils/login.c
|
|
@@ -203,12 +203,12 @@ static void timedout(int sig __attribute__((__unused__)))
|
|
*/
|
|
static void sig_handler(int signal)
|
|
{
|
|
- if (child_pid)
|
|
+ if (child_pid > 0) {
|
|
kill(-child_pid, signal);
|
|
- else
|
|
+ if (signal == SIGTERM)
|
|
+ kill(-child_pid, SIGHUP); /* because the shell often ignores SIGTERM */
|
|
+ } else
|
|
got_sig = 1;
|
|
- if (signal == SIGTERM)
|
|
- kill(-child_pid, SIGHUP); /* because the shell often ignores SIGTERM */
|
|
}
|
|
|
|
/*
|
|
--
|
|
2.27.0
|
|
|