diff mbox series

[review,scarthgap] procps: fixed large pid issue with top

Message ID 20251211144527.43224-1-amaury.couderc@est.tech
State Awaiting Upstream
Delegated to: Steve Sakoman
Headers show
Series [review,scarthgap] procps: fixed large pid issue with top | expand

Commit Message

amaury.couderc@est.tech Dec. 11, 2025, 2:44 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

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

Comments

Yoann Congal Dec. 11, 2025, 3:22 p.m. UTC | #1
Hello,

Le jeu. 11 déc. 2025 à 15:46, amaury.couderc via
lists.openembedded.org
<amaury.couderc=est.tech@lists.openembedded.org> a écrit :
>
> 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
>
> Signed-off-by: Amaury Couderc <amaury.couderc@est.tech>

It looks like this patch is also applicable&needed on master (the
fixing patch has not been in a procps release yet).
Can you send it there, then, ask for a backport on scarthgap when it
gets merged?

Thanks!

> ---
>  .../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 --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"
>
> --
> 2.50.1
>
>
> -=-=-=-=-=-=-=-=-=-=-=-
> Links: You receive all messages sent to this group.
> View/Reply Online (#227538): https://lists.openembedded.org/g/openembedded-core/message/227538
> Mute This Topic: https://lists.openembedded.org/mt/116729698/4316185
> Group Owner: openembedded-core+owner@lists.openembedded.org
> Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub [yoann.congal@smile.fr]
> -=-=-=-=-=-=-=-=-=-=-=-
>
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"