diff options
Diffstat (limited to 'sys-process/psmisc/files')
-rw-r--r-- | sys-process/psmisc/files/psmisc-23.5-fix-killall-pidfd_send_signal.patch | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/sys-process/psmisc/files/psmisc-23.5-fix-killall-pidfd_send_signal.patch b/sys-process/psmisc/files/psmisc-23.5-fix-killall-pidfd_send_signal.patch new file mode 100644 index 000000000000..0fc9c30a9635 --- /dev/null +++ b/sys-process/psmisc/files/psmisc-23.5-fix-killall-pidfd_send_signal.patch @@ -0,0 +1,40 @@ +https://gitlab.com/psmisc/psmisc/-/commit/6892e321e7042e3df60a5501a1c59d076e8a856f + +From 6892e321e7042e3df60a5501a1c59d076e8a856f Mon Sep 17 00:00:00 2001 +From: Craig Small <csmall@dropbear.xyz> +Date: Mon, 18 Jul 2022 20:16:42 +1000 +Subject: [PATCH] killall: use kill if pidfd_send_signal() fails + +The pidfd_send_signal() system call appeared in Linux 5.1 +If psmisc is build on a system before then, or a non-Linux +system, then kill() is used instead. However if psmisc is +built on a Linux >= 5.1 system but run on a < 5.1 Linux +system the system call fails and killall doesn't work. + +The fix, as proposed by Peter T. Breuer, is to try +pidfd_send_signal() and if the return value is < 0 and +errno is ENOSYS then we know at runtime the system call +failed and we fall through to trusty old kill(). + +Note, this means that killall on systems below 5.1 still +have the race PID condition that the pidfd calls fix. + +References: + https://bugs.debian.org/1015228 +--- a/src/killall.c ++++ b/src/killall.c +@@ -326,7 +326,12 @@ my_send_signal( + { + #ifdef __NR_pidfd_send_signal + if (pid > 0) /* Not PGID */ +- return syscall(__NR_pidfd_send_signal, pidfd, sig, NULL, 0); ++ { ++ int ret = syscall(__NR_pidfd_send_signal, pidfd, sig, NULL, 0); ++ if (ret >= 0 || errno != ENOSYS) ++ return ret; ++ // fall through if no such syscall ++ } + #endif + return kill(pid, sig); + } +GitLab |