Hello community, here is the log from the commit of package procps for openSUSE:Factory checked in at 2020-10-08 13:09:52 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/procps (Old) and /work/SRC/openSUSE:Factory/.procps.new.4249 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "procps" Thu Oct 8 13:09:52 2020 rev:116 rq:839997 version:3.3.16 Changes: -------- --- /work/SRC/openSUSE:Factory/procps/procps.changes 2020-09-29 18:58:52.681560269 +0200 +++ /work/SRC/openSUSE:Factory/.procps.new.4249/procps.changes 2020-10-08 13:10:55.835104335 +0200 @@ -1,0 +2,6 @@ +Wed Oct 7 08:53:42 UTC 2020 - Martin Liška <[email protected]> + +- Add upstream procps-check-sanity-of-SC_ARG_MAX.patch in order to fix + pgrep: cannot allocate 4611686018427387903 bytes when ulimit -s is unlimited. + +------------------------------------------------------------------- New: ---- procps-check-sanity-of-SC_ARG_MAX.patch ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ procps.spec ++++++ --- /var/tmp/diff_new_pack.rYP0Gu/_old 2020-10-08 13:10:58.239106512 +0200 +++ /var/tmp/diff_new_pack.rYP0Gu/_new 2020-10-08 13:10:58.243106515 +0200 @@ -58,6 +58,7 @@ Patch33: procps-ng-3.3.11-pmap4suse.patch # PATCH-FIX-UPSTREAM -- "ps -C" does not allow anymore an argument longer than 15 characters Patch34: procps-ng-3e1c00d0.patch +Patch35: procps-check-sanity-of-SC_ARG_MAX.patch BuildRequires: automake BuildRequires: dejagnu @@ -146,6 +147,7 @@ %patch32 %patch33 -b .pmap4us %patch34 -p1 +%patch35 -p1 %build # ++++++ procps-check-sanity-of-SC_ARG_MAX.patch ++++++ >From bb96fc42956c9ed926a1b958ab715f8b4a663dec Mon Sep 17 00:00:00 2001 From: Craig Small <[email protected]> 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
