diff mbox series

[review] procps: fixed large pid issue with top

Message ID 20251212133647.55499-1-amaury.couderc@est.tech
State New
Headers show
Series [review] procps: fixed large pid issue with top | expand

Commit Message

amaury.couderc@est.tech Dec. 12, 2025, 1:35 p.m. UTC
From: Amaury Couderc <amaury.couderc@est.tech>

procps: fixed large pid issue with top

top -b -n1 -H -p 92233720368547758071
  signal 11 (SEGV) was caught by top, please

This patch should be backported to the scarthgap branch once it is merged.

Signed-off-by: Amaury Couderc <amaury.couderc@est.tech>
---
 .../procps/procps/top_large_pid_fix.patch     | 52 +++++++++++++++++++
 meta/recipes-extended/procps/procps_4.0.4.bb  |  1 +
 2 files changed, 53 insertions(+)
 create mode 100644 meta/recipes-extended/procps/procps/top_large_pid_fix.patch
diff mbox series

Patch

diff --git a/meta/recipes-extended/procps/procps/top_large_pid_fix.patch b/meta/recipes-extended/procps/procps/top_large_pid_fix.patch
new file mode 100644
index 0000000000..d7e3141e06
--- /dev/null
+++ b/meta/recipes-extended/procps/procps/top_large_pid_fix.patch
@@ -0,0 +1,52 @@ 
+From f21fc624d960d12afa399af7333d4f9193fb2ffb Mon Sep 17 00:00:00 2001
+From: Jim Warner <james.warner@comcast.net>
+Date: Tue, 16 Sep 2025 12:00:00 -0500
+Subject: [PATCH] library: avoid possible segmentation fault, <pids> api
+Upstream-Status: Backport
+[https://gitlab.com/procps-ng/procps/-/commit/5461b50b1a85c5e556c4cd2739ca8ffdbc69399a]
+
+In the issue referenced below, that SEGV was caused by
+passing a '-1' pid to the procps_pids_select function.
+That value, in turn, is caused by providing a LONG_MAX
+or greater number for what was assigned to an integer.
+
+So, this commit will help ensure we avoid a match when
+we should fail plus skip some unproductive libc calls.
+
+[ the same problem occurs in that old 3.3.17 library ]
+
+Reference(s):
+https://gitlab.com/procps-ng/procps/-/issues/394
+
+Signed-off-by: Jim Warner <james.warner@comcast.net>
+Signed-off-by: Amaury Couderc <amaury.couderc@est.tech>
+
+---
+ library/readproc.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/library/readproc.c b/library/readproc.c
+index 2dfe4c9e..d0e039bf 100644
+--- a/library/readproc.c
++++ b/library/readproc.c
+@@ -1434,7 +1434,7 @@ static int listed_nextpid (PROCTAB *PT, proc_t *p) {
+   pid_t pid = *(PT->pids)++;
+   char *path = PT->path;
+ 
+-  if (pid) {
++  if (pid > 0) {
+     snprintf(path, PROCPATHLEN, "/proc/%d", pid);
+     p->tid = p->tgid = pid;        // this tgid may be a huge fib |
+ 
+@@ -1546,7 +1546,7 @@ PROCTAB *openproc(unsigned flags, ...) {
+         did_stat = 1;
+     }
+     PT->taskdir = NULL;
+-    PT->taskdir_user = -1;
++    PT->taskdir_user = -2;
+     PT->taskfinder = simple_nexttid;
+     PT->taskreader = simple_readtask;
+ 
+-- 
+2.43.0
+
diff --git a/meta/recipes-extended/procps/procps_4.0.4.bb b/meta/recipes-extended/procps/procps_4.0.4.bb
index ec8c4b0261..3c15f28a5b 100644
--- a/meta/recipes-extended/procps/procps_4.0.4.bb
+++ b/meta/recipes-extended/procps/procps_4.0.4.bb
@@ -15,6 +15,7 @@  inherit autotools gettext pkgconfig update-alternatives
 SRC_URI = "git://gitlab.com/procps-ng/procps.git;protocol=https;branch=master \
            file://sysctl.conf \
            file://pidfd.patch \
+           file://top_large_pid_fix.patch \
            "
 SRCREV = "4ddcef2fd843170c8e2d59a83042978f41037a2b"