diff options
| author | millert <> | 2016-12-08 03:20:50 +0000 |
|---|---|---|
| committer | millert <> | 2016-12-08 03:20:50 +0000 |
| commit | ae4af104f03d1d60aa0b563b4c396cfe76d4f653 (patch) | |
| tree | d292488c6aa1dbd79968461ebe6362b6d2e51095 /src/lib/libc | |
| parent | 35370d3f3e9926796677d3695b7fb690f713d7b9 (diff) | |
| download | openbsd-ae4af104f03d1d60aa0b563b4c396cfe76d4f653.tar.gz openbsd-ae4af104f03d1d60aa0b563b4c396cfe76d4f653.tar.bz2 openbsd-ae4af104f03d1d60aa0b563b4c396cfe76d4f653.zip | |
Fix regressions introduce in the fix for CVE-2016-6559.
From FreeBSD (glebius)
Diffstat (limited to 'src/lib/libc')
| -rw-r--r-- | src/lib/libc/net/linkaddr.c | 11 |
1 files changed, 5 insertions, 6 deletions
diff --git a/src/lib/libc/net/linkaddr.c b/src/lib/libc/net/linkaddr.c index 354067b3b5..9101e23a86 100644 --- a/src/lib/libc/net/linkaddr.c +++ b/src/lib/libc/net/linkaddr.c | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | /* $OpenBSD: linkaddr.c,v 1.8 2016/12/07 01:05:47 millert Exp $ */ | 1 | /* $OpenBSD: linkaddr.c,v 1.9 2016/12/08 03:20:50 millert Exp $ */ |
| 2 | /*- | 2 | /*- |
| 3 | * Copyright (c) 1990, 1993 | 3 | * Copyright (c) 1990, 1993 |
| 4 | * The Regents of the University of California. All rights reserved. | 4 | * The Regents of the University of California. All rights reserved. |
| @@ -41,7 +41,7 @@ link_ntoa(const struct sockaddr_dl *sdl) | |||
| 41 | { | 41 | { |
| 42 | static char obuf[64]; | 42 | static char obuf[64]; |
| 43 | char *out; | 43 | char *out; |
| 44 | const char *in, *inlim; | 44 | const u_char *in, *inlim; |
| 45 | int namelen, i, rem; | 45 | int namelen, i, rem; |
| 46 | 46 | ||
| 47 | namelen = (sdl->sdl_nlen <= IFNAMSIZ) ? sdl->sdl_nlen : IFNAMSIZ; | 47 | namelen = (sdl->sdl_nlen <= IFNAMSIZ) ? sdl->sdl_nlen : IFNAMSIZ; |
| @@ -58,11 +58,11 @@ link_ntoa(const struct sockaddr_dl *sdl) | |||
| 58 | } | 58 | } |
| 59 | } | 59 | } |
| 60 | 60 | ||
| 61 | in = (const char *)sdl->sdl_data + sdl->sdl_nlen; | 61 | in = (const u_char *)sdl->sdl_data + sdl->sdl_nlen; |
| 62 | inlim = in + sdl->sdl_alen; | 62 | inlim = in + sdl->sdl_alen; |
| 63 | 63 | ||
| 64 | while (in < inlim && rem > 1) { | 64 | while (in < inlim && rem > 1) { |
| 65 | if (in != (const char *)sdl->sdl_data + sdl->sdl_nlen) { | 65 | if (in != (const u_char *)sdl->sdl_data + sdl->sdl_nlen) { |
| 66 | *out++ = '.'; | 66 | *out++ = '.'; |
| 67 | rem--; | 67 | rem--; |
| 68 | } | 68 | } |
| @@ -70,9 +70,8 @@ link_ntoa(const struct sockaddr_dl *sdl) | |||
| 70 | if (i > 0xf) { | 70 | if (i > 0xf) { |
| 71 | if (rem < 3) | 71 | if (rem < 3) |
| 72 | break; | 72 | break; |
| 73 | *out++ = hexlist[i >> 4]; | ||
| 73 | *out++ = hexlist[i & 0xf]; | 74 | *out++ = hexlist[i & 0xf]; |
| 74 | i >>= 4; | ||
| 75 | *out++ = hexlist[i]; | ||
| 76 | rem -= 2; | 75 | rem -= 2; |
| 77 | } else { | 76 | } else { |
| 78 | if (rem < 2) | 77 | if (rem < 2) |
