summaryrefslogtreecommitdiffstats
path: root/lib/libc/net/linkaddr.c
diff options
context:
space:
mode:
authorglebius <glebius@FreeBSD.org>2016-12-07 23:29:42 +0000
committerglebius <glebius@FreeBSD.org>2016-12-07 23:29:42 +0000
commitb416700da72fd8eab0a75d60f0634e254cbb9347 (patch)
tree953fb5ff3b9f37eb695d1b2877f782162f787198 /lib/libc/net/linkaddr.c
parenta78b02757b69caee4861346847156dd77f0c2e21 (diff)
downloadFreeBSD-src-b416700da72fd8eab0a75d60f0634e254cbb9347.zip
FreeBSD-src-b416700da72fd8eab0a75d60f0634e254cbb9347.tar.gz
Merge r309688: address regressions in SA-16:37.libc.
PR: 215105 Submitted by: <jtd2004a sbcglobal.net> Approved by: so
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 c62b9f9..9432a53 100644
--- a/lib/libc/net/linkaddr.c
+++ b/lib/libc/net/linkaddr.c
@@ -125,7 +125,7 @@ link_ntoa(const struct sockaddr_dl *sdl)
static char obuf[64];
_Static_assert(sizeof(obuf) >= IFNAMSIZ + 20, "obuf is too small");
char *out;
- const char *in, *inlim;
+ const u_char *in, *inlim;
int namelen, i, rem;
namelen = (sdl->sdl_nlen <= IFNAMSIZ) ? sdl->sdl_nlen : IFNAMSIZ;
@@ -142,11 +142,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--;
}
@@ -154,15 +154,14 @@ 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)
break;
*out++ = hexlist[i];
- rem++;
+ rem--;
}
}
*out = 0;
OpenPOWER on IntegriCloud