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


Reply via email to