--- /dev/null
+commit 6892e321e7042e3df60a5501a1c59d076e8a856f
+Author: Craig Small <csmall@dropbear.xyz>
+Date: Mon Jul 18 20:16:42 2022 +1000
+
+ 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
+
+diff --git a/src/killall.c b/src/killall.c
+index 78930c8..f573cfe 100644
+--- 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);
+ }
Summary(uk.UTF-8): Утиліти роботи з процесами
Name: psmisc
Version: 23.5
-Release: 1
+Release: 2
License: GPL v2+
Group: Applications/System
Source0: https://downloads.sourceforge.net/psmisc/%{name}-%{version}.tar.xz
# Source0-md5: 014f0b5d5ab32478a2c57812ad01e1fb
Source1: http://www.mif.pg.gda.pl/homepages/ankry/man-PLD/%{name}-non-english-man-pages.tar.bz2
# Source1-md5: 9add7665e440bbd6b0b4f9293ba8b86d
+Patch0: kill.patch
URL: http://psmisc.sourceforge.net/
BuildRequires: autoconf >= 2.71
BuildRequires: automake >= 1:1.11
%prep
%setup -q
+%patch0 -p1
%build
install -d misc; echo -n '#!/bin/sh\necho -n %{version}' > misc/git-version-gen; chmod +x misc/git-version-gen