summaryrefslogtreecommitdiffstats
path: root/lib/libkvm
diff options
context:
space:
mode:
authorderaadt <deraadt@openbsd.org>2014-10-15 02:03:05 +0000
committerderaadt <deraadt@openbsd.org>2014-10-15 02:03:05 +0000
commitf4ccacb317d6bfa5aefc0d618104deeaf2b34bfa (patch)
tree706110ccd90acf35732283e3a420e1732e114424 /lib/libkvm
parentcreate a REALLOCARRAY macro, and use it where it gives us overflow (diff)
downloadwireguard-openbsd-f4ccacb317d6bfa5aefc0d618104deeaf2b34bfa.tar.xz
wireguard-openbsd-f4ccacb317d6bfa5aefc0d618104deeaf2b34bfa.zip
Apply reallocarray() idiom.
ok guenther
Diffstat (limited to 'lib/libkvm')
-rw-r--r--lib/libkvm/kvm_file2.c16
-rw-r--r--lib/libkvm/kvm_private.h4
-rw-r--r--lib/libkvm/kvm_proc.c20
-rw-r--r--lib/libkvm/kvm_proc2.c4
4 files changed, 23 insertions, 21 deletions
diff --git a/lib/libkvm/kvm_file2.c b/lib/libkvm/kvm_file2.c
index 0930a13048a..294b426901f 100644
--- a/lib/libkvm/kvm_file2.c
+++ b/lib/libkvm/kvm_file2.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: kvm_file2.c,v 1.36 2014/07/04 05:58:31 guenther Exp $ */
+/* $OpenBSD: kvm_file2.c,v 1.37 2014/10/15 02:03:05 deraadt Exp $ */
/*
* Copyright (c) 2009 Todd C. Miller <Todd.Miller@courtesan.com>
@@ -227,11 +227,11 @@ kvm_deadfile_byfile(kvm_t *kd, int op, int arg, size_t esize, int *cnt)
_kvm_err(kd, kd->program, "can't read nfiles");
return (NULL);
}
- buflen = nfiles * esize;
- where = _kvm_malloc(kd, buflen);
+ where = _kvm_reallocarray(kd, NULL, nfiles, esize);
kd->filebase = (void *)where;
if (kd->filebase == NULL)
return (NULL);
+ buflen = nfiles * esize;
for (fp = LIST_FIRST(&filehead);
fp != NULL && esize <= buflen;
@@ -300,11 +300,11 @@ kvm_deadfile_byid(kvm_t *kd, int op, int arg, size_t esize, int *cnt)
return (NULL);
}
/* this may be more room than we need but counting is expensive */
- buflen = (nfiles + 10) * esize;
- where = _kvm_malloc(kd, buflen);
+ where = _kvm_reallocarray(kd, NULL, nfiles + 10, esize);
kd->filebase = (void *)where;
if (kd->filebase == NULL)
return (NULL);
+ buflen = (nfiles + 10) * esize;
for (pr = LIST_FIRST(&allprocess);
pr != NULL;
@@ -358,9 +358,11 @@ kvm_deadfile_byid(kvm_t *kd, int op, int arg, size_t esize, int *cnt)
filed.fd_ofiles = filed0.fd_dfiles;
filed.fd_ofileflags = filed0.fd_dfileflags;
} else {
- size_t fsize = filed.fd_nfiles * OFILESIZE;
- char *tmp = realloc(filebuf, fsize);
+ size_t fsize;
+ char *tmp = reallocarray(filebuf,
+ filed.fd_nfiles, OFILESIZE);
+ fsize = filed.fd_nfiles * OFILESIZE;
if (tmp == NULL) {
_kvm_syserr(kd, kd->program, "realloc ofiles");
goto cleanup;
diff --git a/lib/libkvm/kvm_private.h b/lib/libkvm/kvm_private.h
index 967f4e5cb9b..e11501aaf7b 100644
--- a/lib/libkvm/kvm_private.h
+++ b/lib/libkvm/kvm_private.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: kvm_private.h,v 1.22 2013/11/17 20:27:14 guenther Exp $ */
+/* $OpenBSD: kvm_private.h,v 1.23 2014/10/15 02:03:05 deraadt Exp $ */
/* $NetBSD: kvm_private.h,v 1.7 1996/05/05 04:32:15 gwr Exp $ */
/*-
@@ -99,7 +99,7 @@ int _kvm_initvtop(kvm_t *);
int _kvm_kvatop(kvm_t *, u_long, paddr_t *);
void *_kvm_malloc(kvm_t *kd, size_t);
off_t _kvm_pa2off(kvm_t *, paddr_t);
-void *_kvm_realloc(kvm_t *kd, void *, size_t);
+void *_kvm_reallocarray(kvm_t *kd, void *, size_t, size_t);
void _kvm_syserr(kvm_t *kd, const char *program, const char *fmt, ...)
__attribute__((__format__ (printf, 3, 4)));
ssize_t _kvm_pread(kvm_t *, int, void *, size_t, off_t);
diff --git a/lib/libkvm/kvm_proc.c b/lib/libkvm/kvm_proc.c
index 66dc14d2746..fa1858211d4 100644
--- a/lib/libkvm/kvm_proc.c
+++ b/lib/libkvm/kvm_proc.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: kvm_proc.c,v 1.50 2014/07/04 05:58:31 guenther Exp $ */
+/* $OpenBSD: kvm_proc.c,v 1.51 2014/10/15 02:03:05 deraadt Exp $ */
/* $NetBSD: kvm_proc.c,v 1.30 1999/03/24 05:50:50 mrg Exp $ */
/*-
* Copyright (c) 1998 The NetBSD Foundation, Inc.
@@ -194,9 +194,9 @@ _kvm_ureadm(kvm_t *kd, const struct kinfo_proc *p, u_long va, u_long *cnt)
}
void *
-_kvm_realloc(kvm_t *kd, void *p, size_t n)
+_kvm_reallocarray(kvm_t *kd, void *p, size_t i, size_t n)
{
- void *np = (void *)realloc(p, n);
+ void *np = reallocarray(p, i, n);
if (np == 0)
_kvm_err(kd, kd->program, "out of memory");
@@ -229,13 +229,13 @@ kvm_argv(kvm_t *kd, const struct kinfo_proc *p, u_long addr, int narg,
* Try to avoid reallocs.
*/
kd->argc = MAX(narg + 1, 32);
- kd->argv = _kvm_malloc(kd, kd->argc *
+ kd->argv = _kvm_reallocarray(kd, NULL, kd->argc,
sizeof(*kd->argv));
if (kd->argv == 0)
return (0);
} else if (narg + 1 > kd->argc) {
kd->argc = MAX(2 * kd->argc, narg + 1);
- kd->argv = (char **)_kvm_realloc(kd, kd->argv, kd->argc *
+ kd->argv = (char **)_kvm_reallocarray(kd, kd->argv, kd->argc,
sizeof(*kd->argv));
if (kd->argv == 0)
return (0);
@@ -282,11 +282,11 @@ kvm_argv(kvm_t *kd, const struct kinfo_proc *p, u_long addr, int narg,
char **pp;
char *op = kd->argspc;
- kd->arglen *= 2;
- kd->argspc = (char *)_kvm_realloc(kd, kd->argspc,
- kd->arglen);
+ kd->argspc = _kvm_reallocarray(kd, kd->argspc,
+ kd->arglen, 2);
if (kd->argspc == 0)
return (0);
+ kd->arglen *= 2;
/*
* Adjust argv pointers in case realloc moved
* the string space.
@@ -426,10 +426,10 @@ again:
len = orglen;
ret = (sysctl(mib, 4, kd->argbuf, &len, NULL, 0) < 0);
if (ret && errno == ENOMEM) {
- orglen *= 2;
- buf = _kvm_realloc(kd, kd->argbuf, orglen);
+ buf = _kvm_reallocarray(kd, kd->argbuf, orglen, 2);
if (buf == NULL)
return (NULL);
+ orglen *= 2;
kd->argbuf = buf;
goto again;
}
diff --git a/lib/libkvm/kvm_proc2.c b/lib/libkvm/kvm_proc2.c
index 04270782b93..50e5521631f 100644
--- a/lib/libkvm/kvm_proc2.c
+++ b/lib/libkvm/kvm_proc2.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: kvm_proc2.c,v 1.24 2014/07/08 23:31:22 deraadt Exp $ */
+/* $OpenBSD: kvm_proc2.c,v 1.25 2014/10/15 02:03:05 deraadt Exp $ */
/* $NetBSD: kvm_proc.c,v 1.30 1999/03/24 05:50:50 mrg Exp $ */
/*-
* Copyright (c) 1998 The NetBSD Foundation, Inc.
@@ -471,7 +471,7 @@ kvm_getprocs(kvm_t *kd, int op, int arg, size_t esize, int *cnt)
}
maxthread += maxprocess;
- kd->procbase = _kvm_malloc(kd, maxthread * esize);
+ kd->procbase = _kvm_reallocarray(kd, NULL, maxthread, esize);
if (kd->procbase == 0)
return (NULL);
bp = (char *)kd->procbase;