From b9723148a260189c5cd8cacc3acdd9719d34062a Mon Sep 17 00:00:00 2001 From: Jim Warner Date: Sun, 1 May 2022 00:00:00 -0500 Subject: [PATCH] library: eliminate insidious 'LIBPROC_HIDE_KERNEL' bug MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit When support for the 'LIBPROC_HIDE_KERNEL' environment variable was introduced, a deficiency was present that allowed any rejected proc_t (i.e. a kworker thread) to preserve the strdup'd 'cmd' value. That residual value would prevent stat2proc or status2proc from updating a cmd field with the proper program name for some tasks. This patch just ensures a proc_t is freshened whenever it has been rejected due to an active PT->hide_kernel. [ again thanks to Björn for initiating the extension ] Reference(s): . original hide_kernel implementation commit 2a7ec67ac806d91520f59c384684e2332774368b . original hide_kernel proposal https://gitlab.com/procps-ng/procps/-/merge_requests/147 Signed-off-by: Jim Warner --- proc/readproc.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/proc/readproc.c b/proc/readproc.c index bf1606d6..bd71d950 100644 --- a/proc/readproc.c +++ b/proc/readproc.c @@ -1229,9 +1229,13 @@ static proc_t *simple_readproc(PROCTAB *restrict const PT, proc_t *restrict cons autogroup_fill(path, p); // openproc() ensured that a ppid will be present when needed ... - if (rc == 0) - return (PT->hide_kernel && (p->ppid == 2 || p->tid == 2)) ? NULL : p; - + if (rc == 0) { + if (PT->hide_kernel && (p->ppid == 2 || p->tid == 2)) { + free_acquired(p); + return NULL; + } + return p; + } errno = ENOMEM; next_proc: return NULL;