summaryrefslogtreecommitdiffstats
path: root/lib/libc/net/linkaddr.c
diff options
context:
space:
mode:
authormillert <millert@openbsd.org>2016-12-08 03:20:50 +0000
committermillert <millert@openbsd.org>2016-12-08 03:20:50 +0000
commit7a8c33b7f43c178f8cbed7b8feb7284d2dff6ee5 (patch)
tree1643b1f5d025d9a7d543a9be30051503a7249f0d /lib/libc/net/linkaddr.c
parentsync (diff)
downloadwireguard-openbsd-7a8c33b7f43c178f8cbed7b8feb7284d2dff6ee5.tar.xz
wireguard-openbsd-7a8c33b7f43c178f8cbed7b8feb7284d2dff6ee5.zip
Fix regressions introduce in the fix for CVE-2016-6559.
From FreeBSD (glebius)
Diffstat (limited to 'lib/libc/net/linkaddr.c')
-rw-r--r--lib/libc/net/linkaddr.c11
1 files changed, 5 insertions, 6 deletions
diff --git a/lib/libc/net/linkaddr.c b/lib/libc/net/linkaddr.c
index 354067b3b59..9101e23a862 100644
--- a/lib/libc/net/linkaddr.c
+++ b/lib/libc/net/linkaddr.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: linkaddr.c,v 1.8 2016/12/07 01:05:47 millert Exp $ */
+/* $OpenBSD: linkaddr.c,v 1.9 2016/12/08 03:20:50 millert Exp $ */
/*-
* Copyright (c) 1990, 1993
* The Regents of the University of California. All rights reserved.
@@ -41,7 +41,7 @@ link_ntoa(const struct sockaddr_dl *sdl)
{
static char obuf[64];
char *out;
- const char *in, *inlim;
+ const u_char *in, *inlim;
int namelen, i, rem;
namelen = (sdl->sdl_nlen <= IFNAMSIZ) ? sdl->sdl_nlen : IFNAMSIZ;
@@ -58,11 +58,11 @@ link_ntoa(const struct sockaddr_dl *sdl)
}
}
- in = (const char *)sdl->sdl_data + sdl->sdl_nlen;
+ in = (const u_char *)sdl->sdl_data + sdl->sdl_nlen;
inlim = in + sdl->sdl_alen;
while (in < inlim && rem > 1) {
- if (in != (const char *)sdl->sdl_data + sdl->sdl_nlen) {
+ if (in != (const u_char *)sdl->sdl_data + sdl->sdl_nlen) {
*out++ = '.';
rem--;
}
@@ -70,9 +70,8 @@ link_ntoa(const struct sockaddr_dl *sdl)
if (i > 0xf) {
if (rem < 3)
break;
+ *out++ = hexlist[i >> 4];
*out++ = hexlist[i & 0xf];
- i >>= 4;
- *out++ = hexlist[i];
rem -= 2;
} else {
if (rem < 2)