From 34d263dddc98200ed6fefffd0bb8b0fcb37762e7 Mon Sep 17 00:00:00 2001 From: Lars Wendler Date: Mon, 25 Jan 2021 23:14:17 +0100 Subject: sys-process/procps: Revbump to fix pgrep/pkill with kernel-5.10+ Reported-by: Timo Rothenpieler Closes: https://bugs.gentoo.org/767217 Package-Manager: Portage-3.0.14, Repoman-3.0.2 Signed-off-by: Lars Wendler --- .../procps-3.3.16-SC_ARG_MAX_sanity_check.patch | 60 +++++++++++++++ sys-process/procps/procps-3.3.16-r3.ebuild | 88 ++++++++++++++++++++++ 2 files changed, 148 insertions(+) create mode 100644 sys-process/procps/files/procps-3.3.16-SC_ARG_MAX_sanity_check.patch create mode 100644 sys-process/procps/procps-3.3.16-r3.ebuild diff --git a/sys-process/procps/files/procps-3.3.16-SC_ARG_MAX_sanity_check.patch b/sys-process/procps/files/procps-3.3.16-SC_ARG_MAX_sanity_check.patch new file mode 100644 index 000000000000..1b85c2c855f1 --- /dev/null +++ b/sys-process/procps/files/procps-3.3.16-SC_ARG_MAX_sanity_check.patch @@ -0,0 +1,60 @@ +From bb96fc42956c9ed926a1b958ab715f8b4a663dec Mon Sep 17 00:00:00 2001 +From: Craig Small +Date: Sun, 5 Jan 2020 15:05:55 +1100 +Subject: [PATCH] pgrep: check sanity of SC_ARG_MAX + +A kernel change means we cannot trust what sysconf(SC_ARG_MAX) +returns. We clamp it so its more than 4096 and less than 128*1024 +which is what findutils does. + +References: + procps-ng/procps#152 + https://git.savannah.gnu.org/cgit/findutils.git/tree/lib/buildcmd.c#n535 + https://lwn.net/Articles/727862/ +--- + pgrep.c | 22 +++++++++++++++++++++- + 1 file changed, 21 insertions(+), 1 deletion(-) + +diff --git a/pgrep.c b/pgrep.c +index 01563db..bde7448 100644 +--- a/pgrep.c ++++ b/pgrep.c +@@ -485,6 +485,26 @@ static regex_t * do_regcomp (void) + return preg; + } + ++/* ++ * SC_ARG_MAX used to return the maximum size a command line can be ++ * however changes to the kernel mean this can be bigger than we can ++ * alloc. Clamp it to 128kB like xargs and friends do ++ * Should also not be smaller than POSIX_ARG_MAX which is 4096 ++ */ ++static size_t get_arg_max(void) ++{ ++#define MIN_ARG_SIZE 4096u ++#define MAX_ARG_SIZE (128u * 1024u) ++ ++ size_t val = sysconf(_SC_ARG_MAX); ++ ++ if (val < MIN_ARG_SIZE) ++ val = MIN_ARG_SIZE; ++ if (val > MAX_ARG_SIZE) ++ val = MAX_ARG_SIZE; ++ ++ return val; ++} + static struct el * select_procs (int *num) + { + PROCTAB *ptp; +@@ -497,7 +517,7 @@ static struct el * select_procs (int *num) + regex_t *preg; + pid_t myself = getpid(); + struct el *list = NULL; +- long cmdlen = sysconf(_SC_ARG_MAX) * sizeof(char); ++ long cmdlen = get_arg_max() * sizeof(char); + char *cmdline = xmalloc(cmdlen); + char *cmdsearch = xmalloc(cmdlen); + char *cmdoutput = xmalloc(cmdlen); +-- +GitLab + diff --git a/sys-process/procps/procps-3.3.16-r3.ebuild b/sys-process/procps/procps-3.3.16-r3.ebuild new file mode 100644 index 000000000000..5e67f3649e5c --- /dev/null +++ b/sys-process/procps/procps-3.3.16-r3.ebuild @@ -0,0 +1,88 @@ +# Copyright 1999-2021 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI=7 + +inherit toolchain-funcs flag-o-matic multilib-minimal usr-ldscript + +DESCRIPTION="standard informational utilities and process-handling tools" +HOMEPAGE="http://procps-ng.sourceforge.net/ https://gitlab.com/procps-ng/procps" +SRC_URI="mirror://sourceforge/${PN}-ng/${PN}-ng-${PV}.tar.xz" + +LICENSE="GPL-2" +SLOT="0/8" # libprocps.so +KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~ia64 ~m68k ~mips ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86 ~amd64-linux ~x86-linux" +IUSE="elogind +kill modern-top +ncurses nls selinux static-libs systemd test unicode" +RESTRICT="!test? ( test )" + +COMMON_DEPEND=" + elogind? ( sys-auth/elogind ) + ncurses? ( >=sys-libs/ncurses-5.7-r7:=[unicode?] ) + selinux? ( sys-libs/libselinux[${MULTILIB_USEDEP}] ) + systemd? ( sys-apps/systemd[${MULTILIB_USEDEP}] ) +" +DEPEND="${COMMON_DEPEND} + elogind? ( virtual/pkgconfig ) + ncurses? ( virtual/pkgconfig ) + systemd? ( virtual/pkgconfig ) + test? ( dev-util/dejagnu )" +RDEPEND=" + ${COMMON_DEPEND} + kill? ( + !sys-apps/coreutils[kill] + !sys-apps/util-linux[kill] + ) + !