Date: Tue, 6 Dec 2016 19:19:18 +0000 (UTC) From: Gleb Smirnoff <glebius@FreeBSD.org> To: src-committers@freebsd.org, svn-src-user@freebsd.org Subject: svn commit: r309651 - in user/cperciva/freebsd-update-build/patches: 10.1-RELEASE 10.2-RELEASE 10.3-RELEASE 11.0-RELEASE 9.3-RELEASE Message-ID: <201612061919.uB6JJIfl029833@repo.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: glebius Date: Tue Dec 6 19:19:17 2016 New Revision: 309651 URL: https://svnweb.freebsd.org/changeset/base/309651 Log: Publish SA-16:36, SA-16:37, SA-16:38. Added: user/cperciva/freebsd-update-build/patches/10.1-RELEASE/43-SA-16:36.telnetd user/cperciva/freebsd-update-build/patches/10.1-RELEASE/43-SA-16:37.libc user/cperciva/freebsd-update-build/patches/10.1-RELEASE/43-SA-16:38.bhyve user/cperciva/freebsd-update-build/patches/10.2-RELEASE/26-SA-16:36.telnetd user/cperciva/freebsd-update-build/patches/10.2-RELEASE/26-SA-16:37.libc user/cperciva/freebsd-update-build/patches/10.2-RELEASE/26-SA-16:38.bhyve user/cperciva/freebsd-update-build/patches/10.3-RELEASE/13-SA-16:36.telnetd user/cperciva/freebsd-update-build/patches/10.3-RELEASE/13-SA-16:37.libc user/cperciva/freebsd-update-build/patches/10.3-RELEASE/13-SA-16:38.bhyve user/cperciva/freebsd-update-build/patches/11.0-RELEASE/4-SA-16:36.telnetd user/cperciva/freebsd-update-build/patches/11.0-RELEASE/4-SA-16:37.libc user/cperciva/freebsd-update-build/patches/11.0-RELEASE/4-SA-16:38.bhyve user/cperciva/freebsd-update-build/patches/9.3-RELEASE/51-SA-16:36.telnetd user/cperciva/freebsd-update-build/patches/9.3-RELEASE/51-SA-16:37.libc Added: user/cperciva/freebsd-update-build/patches/10.1-RELEASE/43-SA-16:36.telnetd ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ user/cperciva/freebsd-update-build/patches/10.1-RELEASE/43-SA-16:36.telnetd Tue Dec 6 19:19:17 2016 (r309651) @@ -0,0 +1,26 @@ +--- contrib/telnet/telnetd/sys_term.c.orig ++++ contrib/telnet/telnetd/sys_term.c +@@ -1159,7 +1159,7 @@ + */ + argv = (char **)malloc(sizeof(*argv) * 12); + if (argv == NULL) +- return(NULL); ++ fatal(net, "failure allocating argument space"); + *argv++ = (char *)10; + *argv = (char *)0; + } +@@ -1170,11 +1170,12 @@ + *argv = (char *)((long)(*argv) + 10); + argv = (char **)realloc(argv, sizeof(*argv)*((long)(*argv) + 2)); + if (argv == NULL) +- return(NULL); ++ fatal(net, "failure allocating argument space"); + argv++; + cpp = &argv[(long)argv[-1] - 10]; + } +- *cpp++ = strdup(val); ++ if ((*cpp++ = strdup(val)) == NULL) ++ fatal(net, "failure allocating argument space"); + *cpp = 0; + return(argv); + } Added: user/cperciva/freebsd-update-build/patches/10.1-RELEASE/43-SA-16:37.libc ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ user/cperciva/freebsd-update-build/patches/10.1-RELEASE/43-SA-16:37.libc Tue Dec 6 19:19:17 2016 (r309651) @@ -0,0 +1,75 @@ +--- lib/libc/net/linkaddr.c.orig ++++ lib/libc/net/linkaddr.c +@@ -35,6 +35,7 @@ + + #include <sys/types.h> + #include <sys/socket.h> ++#include <net/if.h> + #include <net/if_dl.h> + #include <string.h> + +@@ -122,31 +123,47 @@ + link_ntoa(const struct sockaddr_dl *sdl) + { + static char obuf[64]; +- char *out = obuf; +- int i; +- u_char *in = (u_char *)LLADDR(sdl); +- u_char *inlim = in + sdl->sdl_alen; +- int firsttime = 1; ++ _Static_assert(sizeof(obuf) >= IFNAMSIZ + 20, "obuf is too small"); ++ char *out; ++ const char *in, *inlim; ++ int namelen, i, rem; + +- if (sdl->sdl_nlen) { +- bcopy(sdl->sdl_data, obuf, sdl->sdl_nlen); +- out += sdl->sdl_nlen; +- if (sdl->sdl_alen) ++ namelen = (sdl->sdl_nlen <= IFNAMSIZ) ? sdl->sdl_nlen : IFNAMSIZ; ++ ++ out = obuf; ++ rem = sizeof(obuf); ++ if (namelen > 0) { ++ bcopy(sdl->sdl_data, out, namelen); ++ out += namelen; ++ rem -= namelen; ++ if (sdl->sdl_alen > 0) { + *out++ = ':'; ++ rem--; ++ } + } +- while (in < inlim) { +- if (firsttime) +- firsttime = 0; +- else ++ ++ in = (const 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) { + *out++ = '.'; ++ rem--; ++ } + i = *in++; + if (i > 0xf) { +- out[1] = hexlist[i & 0xf]; ++ if (rem < 3) ++ break; ++ *out++ = hexlist[i & 0xf]; + i >>= 4; +- out[0] = hexlist[i]; +- out += 2; +- } else + *out++ = hexlist[i]; ++ rem -= 2; ++ } else { ++ if (rem < 2) ++ break; ++ *out++ = hexlist[i]; ++ rem++; ++ } + } + *out = 0; + return (obuf); Added: user/cperciva/freebsd-update-build/patches/10.1-RELEASE/43-SA-16:38.bhyve ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ user/cperciva/freebsd-update-build/patches/10.1-RELEASE/43-SA-16:38.bhyve Tue Dec 6 19:19:17 2016 (r309651) @@ -0,0 +1,19 @@ +--- lib/libvmmapi/vmmapi.c.orig ++++ lib/libvmmapi/vmmapi.c +@@ -263,12 +263,14 @@ + /* XXX VM_MMAP_SPARSE not implemented yet */ + assert(ctx->vms == VM_MMAP_ALL); + +- if (gaddr < ctx->lowmem && gaddr + len <= ctx->lowmem) ++ if (gaddr < ctx->lowmem && len <= ctx->lowmem && ++ gaddr + len <= ctx->lowmem) + return ((void *)(ctx->lowmem_addr + gaddr)); + + if (gaddr >= 4*GB) { + gaddr -= 4*GB; +- if (gaddr < ctx->highmem && gaddr + len <= ctx->highmem) ++ if (gaddr < ctx->highmem && len <= ctx->highmem && ++ gaddr + len <= ctx->highmem) + return ((void *)(ctx->highmem_addr + gaddr)); + } + Added: user/cperciva/freebsd-update-build/patches/10.2-RELEASE/26-SA-16:36.telnetd ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ user/cperciva/freebsd-update-build/patches/10.2-RELEASE/26-SA-16:36.telnetd Tue Dec 6 19:19:17 2016 (r309651) @@ -0,0 +1,26 @@ +--- contrib/telnet/telnetd/sys_term.c.orig ++++ contrib/telnet/telnetd/sys_term.c +@@ -1159,7 +1159,7 @@ + */ + argv = (char **)malloc(sizeof(*argv) * 12); + if (argv == NULL) +- return(NULL); ++ fatal(net, "failure allocating argument space"); + *argv++ = (char *)10; + *argv = (char *)0; + } +@@ -1170,11 +1170,12 @@ + *argv = (char *)((long)(*argv) + 10); + argv = (char **)realloc(argv, sizeof(*argv)*((long)(*argv) + 2)); + if (argv == NULL) +- return(NULL); ++ fatal(net, "failure allocating argument space"); + argv++; + cpp = &argv[(long)argv[-1] - 10]; + } +- *cpp++ = strdup(val); ++ if ((*cpp++ = strdup(val)) == NULL) ++ fatal(net, "failure allocating argument space"); + *cpp = 0; + return(argv); + } Added: user/cperciva/freebsd-update-build/patches/10.2-RELEASE/26-SA-16:37.libc ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ user/cperciva/freebsd-update-build/patches/10.2-RELEASE/26-SA-16:37.libc Tue Dec 6 19:19:17 2016 (r309651) @@ -0,0 +1,75 @@ +--- lib/libc/net/linkaddr.c.orig ++++ lib/libc/net/linkaddr.c +@@ -35,6 +35,7 @@ + + #include <sys/types.h> + #include <sys/socket.h> ++#include <net/if.h> + #include <net/if_dl.h> + #include <string.h> + +@@ -122,31 +123,47 @@ + link_ntoa(const struct sockaddr_dl *sdl) + { + static char obuf[64]; +- char *out = obuf; +- int i; +- u_char *in = (u_char *)LLADDR(sdl); +- u_char *inlim = in + sdl->sdl_alen; +- int firsttime = 1; ++ _Static_assert(sizeof(obuf) >= IFNAMSIZ + 20, "obuf is too small"); ++ char *out; ++ const char *in, *inlim; ++ int namelen, i, rem; + +- if (sdl->sdl_nlen) { +- bcopy(sdl->sdl_data, obuf, sdl->sdl_nlen); +- out += sdl->sdl_nlen; +- if (sdl->sdl_alen) ++ namelen = (sdl->sdl_nlen <= IFNAMSIZ) ? sdl->sdl_nlen : IFNAMSIZ; ++ ++ out = obuf; ++ rem = sizeof(obuf); ++ if (namelen > 0) { ++ bcopy(sdl->sdl_data, out, namelen); ++ out += namelen; ++ rem -= namelen; ++ if (sdl->sdl_alen > 0) { + *out++ = ':'; ++ rem--; ++ } + } +- while (in < inlim) { +- if (firsttime) +- firsttime = 0; +- else ++ ++ in = (const 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) { + *out++ = '.'; ++ rem--; ++ } + i = *in++; + if (i > 0xf) { +- out[1] = hexlist[i & 0xf]; ++ if (rem < 3) ++ break; ++ *out++ = hexlist[i & 0xf]; + i >>= 4; +- out[0] = hexlist[i]; +- out += 2; +- } else + *out++ = hexlist[i]; ++ rem -= 2; ++ } else { ++ if (rem < 2) ++ break; ++ *out++ = hexlist[i]; ++ rem++; ++ } + } + *out = 0; + return (obuf); Added: user/cperciva/freebsd-update-build/patches/10.2-RELEASE/26-SA-16:38.bhyve ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ user/cperciva/freebsd-update-build/patches/10.2-RELEASE/26-SA-16:38.bhyve Tue Dec 6 19:19:17 2016 (r309651) @@ -0,0 +1,19 @@ +--- lib/libvmmapi/vmmapi.c.orig ++++ lib/libvmmapi/vmmapi.c +@@ -263,12 +263,14 @@ + /* XXX VM_MMAP_SPARSE not implemented yet */ + assert(ctx->vms == VM_MMAP_ALL); + +- if (gaddr < ctx->lowmem && gaddr + len <= ctx->lowmem) ++ if (gaddr < ctx->lowmem && len <= ctx->lowmem && ++ gaddr + len <= ctx->lowmem) + return ((void *)(ctx->lowmem_addr + gaddr)); + + if (gaddr >= 4*GB) { + gaddr -= 4*GB; +- if (gaddr < ctx->highmem && gaddr + len <= ctx->highmem) ++ if (gaddr < ctx->highmem && len <= ctx->highmem && ++ gaddr + len <= ctx->highmem) + return ((void *)(ctx->highmem_addr + gaddr)); + } + Added: user/cperciva/freebsd-update-build/patches/10.3-RELEASE/13-SA-16:36.telnetd ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ user/cperciva/freebsd-update-build/patches/10.3-RELEASE/13-SA-16:36.telnetd Tue Dec 6 19:19:17 2016 (r309651) @@ -0,0 +1,26 @@ +--- contrib/telnet/telnetd/sys_term.c.orig ++++ contrib/telnet/telnetd/sys_term.c +@@ -1159,7 +1159,7 @@ + */ + argv = (char **)malloc(sizeof(*argv) * 12); + if (argv == NULL) +- return(NULL); ++ fatal(net, "failure allocating argument space"); + *argv++ = (char *)10; + *argv = (char *)0; + } +@@ -1170,11 +1170,12 @@ + *argv = (char *)((long)(*argv) + 10); + argv = (char **)realloc(argv, sizeof(*argv)*((long)(*argv) + 2)); + if (argv == NULL) +- return(NULL); ++ fatal(net, "failure allocating argument space"); + argv++; + cpp = &argv[(long)argv[-1] - 10]; + } +- *cpp++ = strdup(val); ++ if ((*cpp++ = strdup(val)) == NULL) ++ fatal(net, "failure allocating argument space"); + *cpp = 0; + return(argv); + } Added: user/cperciva/freebsd-update-build/patches/10.3-RELEASE/13-SA-16:37.libc ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ user/cperciva/freebsd-update-build/patches/10.3-RELEASE/13-SA-16:37.libc Tue Dec 6 19:19:17 2016 (r309651) @@ -0,0 +1,75 @@ +--- lib/libc/net/linkaddr.c.orig ++++ lib/libc/net/linkaddr.c +@@ -35,6 +35,7 @@ + + #include <sys/types.h> + #include <sys/socket.h> ++#include <net/if.h> + #include <net/if_dl.h> + #include <string.h> + +@@ -122,31 +123,47 @@ + link_ntoa(const struct sockaddr_dl *sdl) + { + static char obuf[64]; +- char *out = obuf; +- int i; +- u_char *in = (u_char *)LLADDR(sdl); +- u_char *inlim = in + sdl->sdl_alen; +- int firsttime = 1; ++ _Static_assert(sizeof(obuf) >= IFNAMSIZ + 20, "obuf is too small"); ++ char *out; ++ const char *in, *inlim; ++ int namelen, i, rem; + +- if (sdl->sdl_nlen) { +- bcopy(sdl->sdl_data, obuf, sdl->sdl_nlen); +- out += sdl->sdl_nlen; +- if (sdl->sdl_alen) ++ namelen = (sdl->sdl_nlen <= IFNAMSIZ) ? sdl->sdl_nlen : IFNAMSIZ; ++ ++ out = obuf; ++ rem = sizeof(obuf); ++ if (namelen > 0) { ++ bcopy(sdl->sdl_data, out, namelen); ++ out += namelen; ++ rem -= namelen; ++ if (sdl->sdl_alen > 0) { + *out++ = ':'; ++ rem--; ++ } + } +- while (in < inlim) { +- if (firsttime) +- firsttime = 0; +- else ++ ++ in = (const 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) { + *out++ = '.'; ++ rem--; ++ } + i = *in++; + if (i > 0xf) { +- out[1] = hexlist[i & 0xf]; ++ if (rem < 3) ++ break; ++ *out++ = hexlist[i & 0xf]; + i >>= 4; +- out[0] = hexlist[i]; +- out += 2; +- } else + *out++ = hexlist[i]; ++ rem -= 2; ++ } else { ++ if (rem < 2) ++ break; ++ *out++ = hexlist[i]; ++ rem++; ++ } + } + *out = 0; + return (obuf); Added: user/cperciva/freebsd-update-build/patches/10.3-RELEASE/13-SA-16:38.bhyve ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ user/cperciva/freebsd-update-build/patches/10.3-RELEASE/13-SA-16:38.bhyve Tue Dec 6 19:19:17 2016 (r309651) @@ -0,0 +1,24 @@ +--- lib/libvmmapi/vmmapi.c.orig ++++ lib/libvmmapi/vmmapi.c +@@ -426,13 +426,18 @@ + { + + if (ctx->lowmem > 0) { +- if (gaddr < ctx->lowmem && gaddr + len <= ctx->lowmem) ++ if (gaddr < ctx->lowmem && len <= ctx->lowmem && ++ gaddr + len <= ctx->lowmem) + return (ctx->baseaddr + gaddr); + } + + if (ctx->highmem > 0) { +- if (gaddr >= 4*GB && gaddr + len <= 4*GB + ctx->highmem) +- return (ctx->baseaddr + gaddr); ++ if (gaddr >= 4*GB) { ++ if (gaddr < 4*GB + ctx->highmem && ++ len <= ctx->highmem && ++ gaddr + len <= 4*GB + ctx->highmem) ++ return (ctx->baseaddr + gaddr); ++ } + } + + return (NULL); Added: user/cperciva/freebsd-update-build/patches/11.0-RELEASE/4-SA-16:36.telnetd ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ user/cperciva/freebsd-update-build/patches/11.0-RELEASE/4-SA-16:36.telnetd Tue Dec 6 19:19:17 2016 (r309651) @@ -0,0 +1,26 @@ +--- contrib/telnet/telnetd/sys_term.c.orig ++++ contrib/telnet/telnetd/sys_term.c +@@ -1159,7 +1159,7 @@ + */ + argv = (char **)malloc(sizeof(*argv) * 12); + if (argv == NULL) +- return(NULL); ++ fatal(net, "failure allocating argument space"); + *argv++ = (char *)10; + *argv = (char *)0; + } +@@ -1170,11 +1170,12 @@ + *argv = (char *)((long)(*argv) + 10); + argv = (char **)realloc(argv, sizeof(*argv)*((long)(*argv) + 2)); + if (argv == NULL) +- return(NULL); ++ fatal(net, "failure allocating argument space"); + argv++; + cpp = &argv[(long)argv[-1] - 10]; + } +- *cpp++ = strdup(val); ++ if ((*cpp++ = strdup(val)) == NULL) ++ fatal(net, "failure allocating argument space"); + *cpp = 0; + return(argv); + } Added: user/cperciva/freebsd-update-build/patches/11.0-RELEASE/4-SA-16:37.libc ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ user/cperciva/freebsd-update-build/patches/11.0-RELEASE/4-SA-16:37.libc Tue Dec 6 19:19:17 2016 (r309651) @@ -0,0 +1,75 @@ +--- lib/libc/net/linkaddr.c.orig ++++ lib/libc/net/linkaddr.c +@@ -35,6 +35,7 @@ + + #include <sys/types.h> + #include <sys/socket.h> ++#include <net/if.h> + #include <net/if_dl.h> + #include <string.h> + +@@ -122,31 +123,47 @@ + link_ntoa(const struct sockaddr_dl *sdl) + { + static char obuf[64]; +- char *out = obuf; +- int i; +- u_char *in = (u_char *)LLADDR(sdl); +- u_char *inlim = in + sdl->sdl_alen; +- int firsttime = 1; ++ _Static_assert(sizeof(obuf) >= IFNAMSIZ + 20, "obuf is too small"); ++ char *out; ++ const char *in, *inlim; ++ int namelen, i, rem; + +- if (sdl->sdl_nlen) { +- bcopy(sdl->sdl_data, obuf, sdl->sdl_nlen); +- out += sdl->sdl_nlen; +- if (sdl->sdl_alen) ++ namelen = (sdl->sdl_nlen <= IFNAMSIZ) ? sdl->sdl_nlen : IFNAMSIZ; ++ ++ out = obuf; ++ rem = sizeof(obuf); ++ if (namelen > 0) { ++ bcopy(sdl->sdl_data, out, namelen); ++ out += namelen; ++ rem -= namelen; ++ if (sdl->sdl_alen > 0) { + *out++ = ':'; ++ rem--; ++ } + } +- while (in < inlim) { +- if (firsttime) +- firsttime = 0; +- else ++ ++ in = (const 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) { + *out++ = '.'; ++ rem--; ++ } + i = *in++; + if (i > 0xf) { +- out[1] = hexlist[i & 0xf]; ++ if (rem < 3) ++ break; ++ *out++ = hexlist[i & 0xf]; + i >>= 4; +- out[0] = hexlist[i]; +- out += 2; +- } else + *out++ = hexlist[i]; ++ rem -= 2; ++ } else { ++ if (rem < 2) ++ break; ++ *out++ = hexlist[i]; ++ rem++; ++ } + } + *out = 0; + return (obuf); Added: user/cperciva/freebsd-update-build/patches/11.0-RELEASE/4-SA-16:38.bhyve ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ user/cperciva/freebsd-update-build/patches/11.0-RELEASE/4-SA-16:38.bhyve Tue Dec 6 19:19:17 2016 (r309651) @@ -0,0 +1,24 @@ +--- lib/libvmmapi/vmmapi.c.orig ++++ lib/libvmmapi/vmmapi.c +@@ -426,13 +426,18 @@ + { + + if (ctx->lowmem > 0) { +- if (gaddr < ctx->lowmem && gaddr + len <= ctx->lowmem) ++ if (gaddr < ctx->lowmem && len <= ctx->lowmem && ++ gaddr + len <= ctx->lowmem) + return (ctx->baseaddr + gaddr); + } + + if (ctx->highmem > 0) { +- if (gaddr >= 4*GB && gaddr + len <= 4*GB + ctx->highmem) +- return (ctx->baseaddr + gaddr); ++ if (gaddr >= 4*GB) { ++ if (gaddr < 4*GB + ctx->highmem && ++ len <= ctx->highmem && ++ gaddr + len <= 4*GB + ctx->highmem) ++ return (ctx->baseaddr + gaddr); ++ } + } + + return (NULL); Added: user/cperciva/freebsd-update-build/patches/9.3-RELEASE/51-SA-16:36.telnetd ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ user/cperciva/freebsd-update-build/patches/9.3-RELEASE/51-SA-16:36.telnetd Tue Dec 6 19:19:17 2016 (r309651) @@ -0,0 +1,26 @@ +--- contrib/telnet/telnetd/sys_term.c.orig ++++ contrib/telnet/telnetd/sys_term.c +@@ -1159,7 +1159,7 @@ + */ + argv = (char **)malloc(sizeof(*argv) * 12); + if (argv == NULL) +- return(NULL); ++ fatal(net, "failure allocating argument space"); + *argv++ = (char *)10; + *argv = (char *)0; + } +@@ -1170,11 +1170,12 @@ + *argv = (char *)((long)(*argv) + 10); + argv = (char **)realloc(argv, sizeof(*argv)*((long)(*argv) + 2)); + if (argv == NULL) +- return(NULL); ++ fatal(net, "failure allocating argument space"); + argv++; + cpp = &argv[(long)argv[-1] - 10]; + } +- *cpp++ = strdup(val); ++ if ((*cpp++ = strdup(val)) == NULL) ++ fatal(net, "failure allocating argument space"); + *cpp = 0; + return(argv); + } Added: user/cperciva/freebsd-update-build/patches/9.3-RELEASE/51-SA-16:37.libc ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ user/cperciva/freebsd-update-build/patches/9.3-RELEASE/51-SA-16:37.libc Tue Dec 6 19:19:17 2016 (r309651) @@ -0,0 +1,75 @@ +--- lib/libc/net/linkaddr.c.orig ++++ lib/libc/net/linkaddr.c +@@ -35,6 +35,7 @@ + + #include <sys/types.h> + #include <sys/socket.h> ++#include <net/if.h> + #include <net/if_dl.h> + #include <string.h> + +@@ -122,31 +123,47 @@ + link_ntoa(const struct sockaddr_dl *sdl) + { + static char obuf[64]; +- char *out = obuf; +- int i; +- u_char *in = (u_char *)LLADDR(sdl); +- u_char *inlim = in + sdl->sdl_alen; +- int firsttime = 1; ++ _Static_assert(sizeof(obuf) >= IFNAMSIZ + 20, "obuf is too small"); ++ char *out; ++ const char *in, *inlim; ++ int namelen, i, rem; + +- if (sdl->sdl_nlen) { +- bcopy(sdl->sdl_data, obuf, sdl->sdl_nlen); +- out += sdl->sdl_nlen; +- if (sdl->sdl_alen) ++ namelen = (sdl->sdl_nlen <= IFNAMSIZ) ? sdl->sdl_nlen : IFNAMSIZ; ++ ++ out = obuf; ++ rem = sizeof(obuf); ++ if (namelen > 0) { ++ bcopy(sdl->sdl_data, out, namelen); ++ out += namelen; ++ rem -= namelen; ++ if (sdl->sdl_alen > 0) { + *out++ = ':'; ++ rem--; ++ } + } +- while (in < inlim) { +- if (firsttime) +- firsttime = 0; +- else ++ ++ in = (const 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) { + *out++ = '.'; ++ rem--; ++ } + i = *in++; + if (i > 0xf) { +- out[1] = hexlist[i & 0xf]; ++ if (rem < 3) ++ break; ++ *out++ = hexlist[i & 0xf]; + i >>= 4; +- out[0] = hexlist[i]; +- out += 2; +- } else + *out++ = hexlist[i]; ++ rem -= 2; ++ } else { ++ if (rem < 2) ++ break; ++ *out++ = hexlist[i]; ++ rem++; ++ } + } + *out = 0; + return (obuf);
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201612061919.uB6JJIfl029833>