git: 42ab99095b7d - main - procstat: CID 1593951: Resource leak
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Wed, 25 Feb 2026 23:10:35 UTC
The branch main has been updated by dab:
URL: https://cgit.FreeBSD.org/src/commit/?id=42ab99095b7dc2243629574e1c627cf5e6a9070c
commit 42ab99095b7dc2243629574e1c627cf5e6a9070c
Author: David Bright <dab@FreeBSD.org>
AuthorDate: 2026-02-21 22:47:00 +0000
Commit: David Bright <dab@FreeBSD.org>
CommitDate: 2026-02-22 21:29:25 +0000
procstat: CID 1593951: Resource leak
Summary: A trivial resource leak fix; free the allocated memory before return.
Test Plan: Code inspection, run command.
I built a simple program that waits for a signal on a kqueue, then ran
that. The standard procstat displays:
```
fbsd-dev% Waiting for SIGTERM...
procstat -a kqueue
PID KQFD FILTER IDENT FLAGS FFLAGS DATA UDATA STATUS
84352 3 SIGNAL 15 C - 0 0x0 -
```
The revised procstat displays:
```
fbsd-dev% sudo LD_LIBRARY_PATH=/usr/obj/usr/home/dab/git/freebsd/src/arm64.aarch64/lib/libutil /usr/obj/usr/home/dab/git/freebsd/src/arm64.aarch64/usr.bin/procstat/procstat -a kqueue
PID KQFD FILTER IDENT FLAGS FFLAGS DATA UDATA STATUS
84352 3 SIGNAL 15 C - 0 0x0 -
fbsd-dev%
```
As expected, the two displays are identical. This doesn't prove that
the leak is gone, but it does prove that the revised command still
operates correctly. I think it can clearly be seen from inspection of
the change that the leak has been remedied.
Reviewed-bys: vangyzen
Differential Revision: https://reviews.freebsd.org/D55422
---
usr.bin/procstat/procstat_kqueue.c | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/usr.bin/procstat/procstat_kqueue.c b/usr.bin/procstat/procstat_kqueue.c
index ce9d2cb42fe2..b4d396e12d3a 100644
--- a/usr.bin/procstat/procstat_kqueue.c
+++ b/usr.bin/procstat/procstat_kqueue.c
@@ -135,8 +135,10 @@ procstat_kqueue_flags(const struct pk_elem *names, unsigned flags, bool commas)
}
}
- if (strlen(res) == 0)
- return (strdup("-"));
+ if (strlen(res) == 0) {
+ free(res);
+ res = strdup("-");
+ }
return (res);
}