52 lines
1.4 KiB
Diff
52 lines
1.4 KiB
Diff
From c1cf5148a1c6302d27661ff0af772de1e7dbb2b6 Mon Sep 17 00:00:00 2001
|
|
From: =?UTF-8?q?P=C3=A1draig=20Brady?= <P@draigBrady.com>
|
|
Date: Mon, 11 Mar 2024 13:18:37 +0000
|
|
Subject: [PATCH] timeout: fix race where we might kill arbitrary processes
|
|
|
|
* src/timeout.c (cleanup): Handle the case where monitored_pid
|
|
might be -1, which could happen if a signal was received
|
|
immediately after a failed fork() call. In that case it would
|
|
send the termination signal to all processes that the timeout
|
|
process has permission to send signals too.
|
|
* NEWS: Mention the bug fix.
|
|
|
|
Reference:https://github.com/coreutils/coreutils/commit/c1cf5148a1c6302d27661ff0af772de1e7dbb2b6
|
|
Conflict:Delete NEWS.
|
|
|
|
---
|
|
src/timeout.c | 11 ++++++++---
|
|
1 file changed, 8 insertions(+), 3 deletions(-)
|
|
|
|
diff --git a/src/timeout.c b/src/timeout.c
|
|
index 6505634..641592c 100644
|
|
--- a/src/timeout.c
|
|
+++ b/src/timeout.c
|
|
@@ -208,7 +208,7 @@ cleanup (int sig)
|
|
timed_out = 1;
|
|
sig = term_signal;
|
|
}
|
|
- if (monitored_pid)
|
|
+ if (0 < monitored_pid)
|
|
{
|
|
if (kill_after)
|
|
{
|
|
@@ -245,8 +245,13 @@ cleanup (int sig)
|
|
}
|
|
}
|
|
}
|
|
- else /* we're the child or the child is not exec'd yet. */
|
|
- _exit (128 + sig);
|
|
+ else if (monitored_pid == -1)
|
|
+ { /* were in the parent, so let it continue to exit below. */
|
|
+ }
|
|
+ else /* monitored_pid == 0 */
|
|
+ { /* we're the child or the child is not exec'd yet. */
|
|
+ _exit (128 + sig);
|
|
+ }
|
|
}
|
|
|
|
void
|
|
--
|
|
2.33.0
|
|
|