Index: lib/libkvm/kvm_proc.c =================================================================== --- lib/libkvm/kvm_proc.c +++ lib/libkvm/kvm_proc.c @@ -667,10 +667,12 @@ static char **bufp; static int argc; + buf = NULL; + if (!ISALIVE(kd)) { _kvm_err(kd, kd->program, "cannot read user space from dead kernel"); - return (0); + goto failure; } if (nchr == 0 || nchr > ARG_MAX) @@ -679,7 +681,7 @@ buf = malloc(nchr); if (buf == NULL) { _kvm_err(kd, kd->program, "cannot allocate memory"); - return (0); + goto failure; } buflen = nchr; argc = 32; @@ -704,12 +706,11 @@ * to the requested len. */ if (errno != ENOMEM || bufsz != (size_t)buflen) - return (0); + goto failure; buf[bufsz - 1] = '\0'; errno = 0; - } else if (bufsz == 0) { - return (0); - } + } else if (bufsz == 0) + goto failure; i = 0; p = buf; do { @@ -717,12 +718,17 @@ p += strlen(p) + 1; if (i >= argc) { argc += argc; - bufp = realloc(bufp, + bufp = reallocf(bufp, sizeof(char *) * argc); + if (bufp == NULL) + goto failure; } } while (p < buf + bufsz); bufp[i++] = 0; return (bufp); +failure: + free(buf); + return (NULL); } char **