summaryrefslogtreecommitdiffstats
path: root/lib/libkvm/kvm_proc.c
diff options
context:
space:
mode:
authorngie <ngie@FreeBSD.org>2016-04-22 18:05:34 +0000
committerngie <ngie@FreeBSD.org>2016-04-22 18:05:34 +0000
commita9f56210b8b8a8dc6b19c46445a79600f523d9dd (patch)
treebb4bdeb74de817bae84cb2140465d0699d8249d8 /lib/libkvm/kvm_proc.c
parentda15c11c3103598c772b1bbb4daf72d65af13e0c (diff)
downloadFreeBSD-src-a9f56210b8b8a8dc6b19c46445a79600f523d9dd.zip
FreeBSD-src-a9f56210b8b8a8dc6b19c46445a79600f523d9dd.tar.gz
Fix up pointer issues with lib/libkvm
In particular, - avoid dereferencing NULL pointers - test pointers against NULL, not 0 - test for errout == NULL in the top-level functions (kvm_open, kvm_openfiles, kvm_open2, etc) - Replace a realloc and free on failure with reallocf Found with: devel/cocchinelle Differential Revision: https://reviews.freebsd.org/D5954 MFC after: 1 week Reviewed by: jhb Sponsored by: EMC / Isilon Storage Division
Diffstat (limited to 'lib/libkvm/kvm_proc.c')
-rw-r--r--lib/libkvm/kvm_proc.c29
1 files changed, 13 insertions, 16 deletions
diff --git a/lib/libkvm/kvm_proc.c b/lib/libkvm/kvm_proc.c
index 2f2b6c6..1eb9872 100644
--- a/lib/libkvm/kvm_proc.c
+++ b/lib/libkvm/kvm_proc.c
@@ -544,7 +544,7 @@ kvm_getprocs(kvm_t *kd, int op, int arg, int *cnt)
size += size / 10;
kd->procbase = (struct kinfo_proc *)
_kvm_realloc(kd, kd->procbase, size);
- if (kd->procbase == 0)
+ if (kd->procbase == NULL)
return (0);
osize = size;
st = sysctl(mib, temp_op == KERN_PROC_ALL ||
@@ -614,7 +614,7 @@ liveout:
}
size = nprocs * sizeof(struct kinfo_proc);
kd->procbase = (struct kinfo_proc *)_kvm_malloc(kd, size);
- if (kd->procbase == 0)
+ if (kd->procbase == NULL)
return (0);
nprocs = kvm_deadprocs(kd, op, arg, nl[1].n_value,
@@ -637,21 +637,19 @@ liveout:
void
_kvm_freeprocs(kvm_t *kd)
{
- if (kd->procbase) {
- free(kd->procbase);
- kd->procbase = 0;
- }
+
+ free(kd->procbase);
+ kd->procbase = NULL;
}
void *
_kvm_realloc(kvm_t *kd, void *p, size_t n)
{
- void *np = (void *)realloc(p, n);
+ void *np;
- if (np == 0) {
- free(p);
+ np = reallocf(p, n);
+ if (np == NULL)
_kvm_err(kd, kd->program, "out of memory");
- }
return (np);
}
@@ -672,7 +670,7 @@ kvm_argv(kvm_t *kd, const struct kinfo_proc *kp, int env, int nchr)
if (!ISALIVE(kd)) {
_kvm_err(kd, kd->program,
"cannot read user space from dead kernel");
- return (0);
+ return (NULL);
}
if (nchr == 0 || nchr > ARG_MAX)
@@ -681,7 +679,7 @@ kvm_argv(kvm_t *kd, const struct kinfo_proc *kp, int env, int nchr)
buf = malloc(nchr);
if (buf == NULL) {
_kvm_err(kd, kd->program, "cannot allocate memory");
- return (0);
+ return (NULL);
}
buflen = nchr;
argc = 32;
@@ -706,12 +704,11 @@ kvm_argv(kvm_t *kd, const struct kinfo_proc *kp, int env, int nchr)
* to the requested len.
*/
if (errno != ENOMEM || bufsz != (size_t)buflen)
- return (0);
+ return (NULL);
buf[bufsz - 1] = '\0';
errno = 0;
- } else if (bufsz == 0) {
- return (0);
- }
+ } else if (bufsz == 0)
+ return (NULL);
i = 0;
p = buf;
do {
OpenPOWER on IntegriCloud