summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoreric <eric@openbsd.org>2013-04-04 17:50:19 +0000
committereric <eric@openbsd.org>2013-04-04 17:50:19 +0000
commitb55974ed076dc056de6e8fcead6a3176b51ffd83 (patch)
tree0cf59ef1f191621c3cf0fd36f9bf796d68123ee1
parentuse the provided ALIGN() macro instead of re-inventing a square wheel. (diff)
downloadwireguard-openbsd-b55974ed076dc056de6e8fcead6a3176b51ffd83.tar.xz
wireguard-openbsd-b55974ed076dc056de6e8fcead6a3176b51ffd83.zip
fix alignment issue in getnetby{addr,name}() too.
-rw-r--r--lib/libc/asr/getnetnamadr.c16
1 files changed, 10 insertions, 6 deletions
diff --git a/lib/libc/asr/getnetnamadr.c b/lib/libc/asr/getnetnamadr.c
index 092363d1b9a..63cc0754f68 100644
--- a/lib/libc/asr/getnetnamadr.c
+++ b/lib/libc/asr/getnetnamadr.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: getnetnamadr.c,v 1.3 2013/04/01 15:49:54 deraadt Exp $ */
+/* $OpenBSD: getnetnamadr.c,v 1.4 2013/04/04 17:50:19 eric Exp $ */
/*
* Copyright (c) 2012 Eric Faurot <eric@openbsd.org>
*
@@ -40,8 +40,15 @@ _fillnetent(const struct netent *e, struct netent *r, char *buf, size_t len)
size_t n, i;
int naliases;
+ bzero(buf, len);
+ bzero(r, sizeof(*r));
+ r->n_aliases = _empty;
+
end = buf + len;
- ptr = (char **)buf; /* XXX align */
+ ptr = (char **)ALIGN(buf);
+
+ if ((char *)ptr >= end)
+ return;
for (naliases = 0; e->n_aliases[naliases]; naliases++)
;
@@ -52,11 +59,8 @@ _fillnetent(const struct netent *e, struct netent *r, char *buf, size_t len)
r->n_aliases = ptr;
pos = (char *)(ptr + (naliases + 1));
- if (pos > end) {
+ if (pos > end)
r->n_aliases = _empty;
- return;
- }
- bzero(ptr, pos - (char *)ptr);
n = strlcpy(pos, e->n_name, end - pos);
if (n >= end - pos)