From 2a7ec67ac806d91520f59c384684e2332774368b Mon Sep 17 00:00:00 2001 From: Jim Warner Date: Tue, 4 Jan 2022 00:00:00 +0100 Subject: [PATCH] library: add support for the 'LIBPROC_HIDE_KERNEL' var MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This patch was prompted by Björn Fischer's merge #147 request referenced below. It has been generalized such that it now embraces both of those 'pids_fetch' types. [ and thanks to Björn for initiating this extension ] Reference(s): https://gitlab.com/procps-ng/procps/-/merge_requests/147 Prototyped-by: Björn Fischer Signed-off-by: Jim Warner --- proc/readproc.c | 15 ++++++++++++++- proc/readproc.h | 1 + 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/proc/readproc.c b/proc/readproc.c index eb3504d8..44203640 100644 --- a/proc/readproc.c +++ b/proc/readproc.c @@ -1225,7 +1225,10 @@ static proc_t *simple_readproc(PROCTAB *restrict const PT, proc_t *restrict cons if (flags & PROC_FILLAUTOGRP) // value the 2 autogroup fields autogroup_fill(path, p); - if (rc == 0) return 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; + errno = ENOMEM; next_proc: return NULL; @@ -1514,10 +1517,13 @@ PROCTAB *openproc(unsigned flags, ...) { va_list ap; struct stat sbuf; static __thread int did_stat; + static __thread int hide_kernel = -1; PROCTAB *PT = calloc(1, sizeof(PROCTAB)); if (!PT) return NULL; + if (hide_kernel < 0) + hide_kernel = (NULL != getenv("LIBPROC_HIDE_KERNEL")); if (!did_stat){ task_dir_missing = stat("/proc/self/task", &sbuf); did_stat = 1; @@ -1547,6 +1553,13 @@ PROCTAB *openproc(unsigned flags, ...) { } va_end(ap); + if (hide_kernel > 0) { + PT->hide_kernel = 1; + // we'll need the ppid, ensure it's obtained via cheapest means ... + if (!(PT->flags & (PROC_FILLSTAT | PROC_FILLSTATUS))) + PT->flags |= PROC_FILLSTAT; + } + if (!src_buffer && !(src_buffer = malloc(MAX_BUFSZ))) { closedir(PT->procfs); diff --git a/proc/readproc.h b/proc/readproc.h index 55453c91..87bb53c7 100644 --- a/proc/readproc.h +++ b/proc/readproc.h @@ -203,6 +203,7 @@ typedef struct PROCTAB { uid_t *uids; // uids of procs int nuid; // cannot really sentinel-terminate unsigned short[] int i; // generic + int hide_kernel; // getenv LIBPROC_HIDE_KERNEL was set unsigned flags; unsigned u; // generic void * vp; // generic