diff --git a/backport-timeout-ensure-foreground-k-exits-with-status-137.patch b/backport-timeout-ensure-foreground-k-exits-with-status-137.patch new file mode 100644 index 0000000000000000000000000000000000000000..8e453587eab2ab0e5fa241394e2b004522517ef8 --- /dev/null +++ b/backport-timeout-ensure-foreground-k-exits-with-status-137.patch @@ -0,0 +1,48 @@ +From 0750fcdf3447366b074cb47dd8cbe88c83ed984d Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?P=C3=A1draig=20Brady?= +Date: Tue, 12 Oct 2021 14:32:57 +0100 +Subject: [PATCH] timeout: ensure --foreground -k exits with status 137 + +* src/timeout.c (main): Propagate the killed status from the child. +* doc/coreutils.texi (timeout invocation): Remove the +description of the --foreground specific handling of SIGKILL, +now that it's consistent with the default mode of operation. +* tests/misc/timeout.sh: Add a test case. +* NEWS: Mention the change in behavior. +Fixes https://bugs.gnu.org/51135 +--- + src/timeout.c | 5 +++++ + tests/misc/timeout.sh | 3 +++ + 2 files changed, 15 insertions(+), 3 deletions(-) + +diff --git a/src/timeout.c b/src/timeout.c +index 34d7926408..6505634617 100644 +--- a/src/timeout.c ++++ b/src/timeout.c +@@ -593,6 +593,11 @@ main (int argc, char **argv) + unblock_signal (sig); + raise (sig); + } ++ /* Allow users to distinguish if command was forcably killed. ++ Needed with --foreground where we don't send SIGKILL to ++ the timeout process itself. */ ++ if (timed_out && sig == SIGKILL) ++ preserve_status = true; + status = sig + 128; /* what sh returns for signaled processes. */ + } + else +diff --git a/tests/misc/timeout.sh b/tests/misc/timeout.sh +index 44ca450d81..295a95773b 100755 +--- a/tests/misc/timeout.sh ++++ b/tests/misc/timeout.sh +@@ -42,7 +42,10 @@ returns_ 124 timeout --preserve-status .1 sleep 10 && fail=1 + # kill delay. Note once the initial timeout triggers, + # the exit status will be 124 even if the command + # exits on its own accord. ++# exit status should be 128+KILL + returns_ 124 timeout -s0 -k1 .1 sleep 10 && fail=1 ++# Ensure a consistent exit status with --foreground ++returns_ 124 timeout --foreground -s0 -k1 .1 sleep 10 && fail=1 + + # Ensure 'timeout' is immune to parent's SIGCHLD handler + # Use a subshell and an exec to work around a bug in FreeBSD 5.0 /bin/sh. diff --git a/coreutils.spec b/coreutils.spec index d4849b9f6c26509ba54beb2a3ea1c0ce8e95c455..413d421729d5d9778f5c263e546d27922223aed6 100644 --- a/coreutils.spec +++ b/coreutils.spec @@ -1,6 +1,6 @@ Name: coreutils Version: 8.32 -Release: 2 +Release: 3 License: GPLv3+ Summary: A set of basic GNU tools commonly used in shell scripts Url: https://www.gnu.org/software/coreutils/ @@ -27,6 +27,7 @@ Patch9: coreutils-8.32-ls-removed-dir.patch Patch10: coreutils-8.32-leaf-opt-xfs.patch Patch11: backport-ls-fix-crash-printing-SELinux-context-for-unstatable.patch Patch12: backport-tr-fix-crash-validating-c-with-some-case-char-classe.patch +Patch13: backport-timeout-ensure-foreground-k-exits-with-status-137.patch Conflicts: filesystem < 3 # To avoid clobbering installs @@ -137,6 +138,9 @@ fi %{_mandir}/man*/* %changelog +* Sat Feb 12 2022 yangzhuangzhuang - 8.32-3 +- timeout: ensure --foreground -k exits with status 137 + * Mon Jan 11 2021 wangchen - 8.32-2 - backport some patches from upstream