git: dcc2fb370791 - main - systat: Avoid incorrect reallocation in pigs.c
Michael Reifenberger
mr at FreeBSD.org
Wed Apr 21 18:20:07 UTC 2021
The branch main has been updated by mr:
URL: https://cgit.FreeBSD.org/src/commit/?id=dcc2fb3707919c5184480d8cbde98d16f24a3945
commit dcc2fb3707919c5184480d8cbde98d16f24a3945
Author: Michael Reifenberger <mr at FreeBSD.org>
AuthorDate: 2021-04-21 18:09:21 +0000
Commit: Michael Reifenberger <mr at FreeBSD.org>
CommitDate: 2021-04-21 18:09:21 +0000
systat: Avoid incorrect reallocation in pigs.c
Stop free() even if kvm_getprocs as we can come back but set nprocs = 0.
Check nprocs in showpigs() to ensure not try displaying with kvm_getprocs failed.
Current code can have pt with non-null after kvm_getprocs() failure.
Replace to realloc for simpler operations.
Submitted by: Yoshihiro Ota ota at j.email.ne.jp
Reviewed by: mckusick@
Differential Revision: https://reviews.freebsd.org/D29303
---
usr.bin/systat/pigs.c | 17 +++++++----------
1 file changed, 7 insertions(+), 10 deletions(-)
diff --git a/usr.bin/systat/pigs.c b/usr.bin/systat/pigs.c
index d9f3f8d4ad14..0bec6aceaaa1 100644
--- a/usr.bin/systat/pigs.c
+++ b/usr.bin/systat/pigs.c
@@ -62,7 +62,7 @@ static int nproc;
static struct p_times {
float pt_pctcpu;
struct kinfo_proc *pt_kp;
-} *pt;
+} *pt = NULL;
static int fscale;
static double lccpu;
@@ -90,7 +90,7 @@ showpigs(void)
const char *uname, *pname;
char pidname[30];
- if (pt == NULL)
+ if (nproc == 0)
return;
qsort(pt, nproc, sizeof (struct p_times), compar);
@@ -146,23 +146,20 @@ fetchpigs(void)
float ftime;
float *pctp;
struct kinfo_proc *kpp;
- static int lastnproc = 0;
+ static int maxnproc = 0;
if ((kpp = kvm_getprocs(kd, KERN_PROC_ALL, 0, &nproc)) == NULL) {
error("%s", kvm_geterr(kd));
- if (pt)
- free(pt);
+ nproc = 0;
return;
}
- if (nproc > lastnproc) {
- free(pt);
- if ((pt =
- malloc(nproc * sizeof(struct p_times))) == NULL) {
+ if (nproc > maxnproc) {
+ if ((pt = realloc(pt, nproc * sizeof(*pt))) == NULL) {
error("Out of memory");
die(0);
}
+ maxnproc = nproc;
}
- lastnproc = nproc;
/*
* calculate %cpu for each proc
*/
More information about the dev-commits-src-all
mailing list