summaryrefslogtreecommitdiffstats
path: root/lib/libkvm/kvm.c
diff options
context:
space:
mode:
authorzhuk <zhuk@openbsd.org>2018-05-03 15:47:41 +0000
committerzhuk <zhuk@openbsd.org>2018-05-03 15:47:41 +0000
commit59133b9f845492c8221a5bf59409357b7e2a6a1c (patch)
treef9d68472fbc76bb62ec73bff85db04b46383b9eb /lib/libkvm/kvm.c
parentMinor correction: we render HTML character references hexadecimal, (diff)
downloadwireguard-openbsd-59133b9f845492c8221a5bf59409357b7e2a6a1c.tar.xz
wireguard-openbsd-59133b9f845492c8221a5bf59409357b7e2a6a1c.zip
A few fixes for kvm_getargv(3)/kvm_getenv(3):
1. Most notable: this splits argv buffer into argv-specific one and environ-specific one. This makes ps -eww totally happy. 2. realloc() usage in kvm_argv() is now ENOMEM-prone. 3. The "int off" changed to "ptrdiff_t off", as it should be. input & okay deraadt@, millert@
Diffstat (limited to 'lib/libkvm/kvm.c')
-rw-r--r--lib/libkvm/kvm.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/lib/libkvm/kvm.c b/lib/libkvm/kvm.c
index dce4359fc78..fc0b3ededb0 100644
--- a/lib/libkvm/kvm.c
+++ b/lib/libkvm/kvm.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: kvm.c,v 1.63 2017/12/14 17:06:33 guenther Exp $ */
+/* $OpenBSD: kvm.c,v 1.64 2018/05/03 15:47:41 zhuk Exp $ */
/* $NetBSD: kvm.c,v 1.43 1996/05/05 04:31:59 gwr Exp $ */
/*-
@@ -191,6 +191,9 @@ _kvm_open(kvm_t *kd, const char *uf, const char *mf, const char *sf,
kd->argspc = 0;
kd->argbuf = 0;
kd->argv = 0;
+ kd->envspc = 0;
+ kd->envbuf = 0;
+ kd->envp = 0;
kd->vmst = NULL;
kd->vm_page_buckets = 0;
kd->kcore_hdr = 0;
@@ -660,6 +663,12 @@ kvm_close(kvm_t *kd)
free((void *)kd->argbuf);
if (kd->argv != 0)
free((void *)kd->argv);
+ if (kd->envspc != 0)
+ free((void *)kd->envspc);
+ if (kd->envbuf != 0)
+ free((void *)kd->envbuf);
+ if (kd->envp != 0)
+ free((void *)kd->envp);
free((void *)kd);
return (error);