commit:     34d263dddc98200ed6fefffd0bb8b0fcb37762e7
Author:     Lars Wendler <polynomial-c <AT> gentoo <DOT> org>
AuthorDate: Mon Jan 25 22:14:17 2021 +0000
Commit:     Lars Wendler <polynomial-c <AT> gentoo <DOT> org>
CommitDate: Mon Jan 25 22:16:42 2021 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=34d263dd

sys-process/procps: Revbump to fix pgrep/pkill with kernel-5.10+

Reported-by: Timo Rothenpieler <timo <AT> rothenpieler.org>
Closes: https://bugs.gentoo.org/767217
Package-Manager: Portage-3.0.14, Repoman-3.0.2
Signed-off-by: Lars Wendler <polynomial-c <AT> gentoo.org>

 .../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(+)

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 00000000000..1b85c2c855f
--- /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 <csm...@dropbear.xyz>
+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 00000000000..5e67f3649e5
--- /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]
+       )
+       !<app-i18n/man-pages-de-2.12-r1
+       !<app-i18n/man-pages-pl-0.7-r1
+"
+
+S="${WORKDIR}/${PN}-ng-${PV}"
+
+PATCHES=(
+       "${FILESDIR}"/${PN}-3.3.11-sysctl-manpage.patch # 565304
+       "${FILESDIR}"/${PN}-3.3.12-proc-tests.patch # 583036
+
+       # Upstream fixes
+       "${FILESDIR}"/${P}-toprc_backwards_compatibility.patch #711676
+       "${FILESDIR}"/${P}-SC_ARG_MAX_sanity_check.patch #767217
+)
+
+multilib_src_configure() {
+       # 
http://www.freelists.org/post/procps/PATCH-enable-transparent-large-file-support
+       append-lfs-flags #471102
+       local myeconfargs=(
+               $(multilib_native_use_with elogind) # No elogind multilib 
support
+               $(multilib_native_use_enable kill)
+               $(multilib_native_use_enable modern-top)
+               $(multilib_native_use_with ncurses)
+               $(use_enable nls)
+               $(use_enable selinux libselinux)
+               $(use_enable static-libs static)
+               $(use_with systemd)
+               $(use_enable unicode watch8bit)
+       )
+       ECONF_SOURCE="${S}" econf "${myeconfargs[@]}"
+}
+
+multilib_src_test() {
+       emake check </dev/null #461302
+}
+
+multilib_src_install() {
+       default
+       #dodoc sysctl.conf
+
+       if multilib_is_native_abi ; then
+               dodir /bin
+               mv "${ED}"/usr/bin/ps "${ED}"/bin/ || die
+               if use kill ; then
+                       mv "${ED}"/usr/bin/kill "${ED}"/bin/ || die
+               fi
+
+               gen_usr_ldscript -a procps
+       fi
+}
+
+multilib_src_install_all() {
+       find "${ED}" -type f -name '*.la' -delete || die
+}

Reply via email to