Index: sys/net/route.c =================================================================== RCS file: /cvsroot/src/sys/net/route.c,v retrieving revision 1.125 diff -u -r1.125 route.c --- sys/net/route.c 31 Mar 2011 19:40:52 -0000 1.125 +++ sys/net/route.c 30 Jan 2012 17:56:10 -0000 @@ -909,8 +909,8 @@ const char *netmaskp = &netmask->sa_data[0], *srcp = &src->sa_data[0]; char *dstp = &dst->sa_data[0]; - const char *maskend = dstp + MIN(netmask->sa_len, src->sa_len); - const char *srcend = dstp + src->sa_len; + const char *maskend = (char *)dst + MIN(netmask->sa_len, src->sa_len); + const char *srcend = (char *)dst + src->sa_len; dst->sa_len = src->sa_len; dst->sa_family = src->sa_family; Index: sys/net/rtsock.c =================================================================== RCS file: /cvsroot/src/sys/net/rtsock.c,v retrieving revision 1.139 diff -u -r1.139 rtsock.c --- sys/net/rtsock.c 31 Dec 2011 20:41:58 -0000 1.139 +++ sys/net/rtsock.c 30 Jan 2012 17:56:10 -0000 @@ -717,7 +717,7 @@ int *lenp) { int i; - int len, dlen, second_time = 0; + int len, dlen, second_time = 0, diff; char *cp0, *cp = cpv; rtinfo->rti_addrs = 0; @@ -735,8 +735,13 @@ rtinfo->rti_addrs |= (1 << i); dlen = RT_XROUNDUP(sa->sa_len); if (cp) { - (void)memcpy(cp, sa, (size_t)dlen); - cp += dlen; + (void)memcpy(cp, sa, sa->sa_len); + cp += sa->sa_len; + diff = dlen - sa->sa_len; + if (diff > 0) { + (void)memset(cp, 0, diff); + cp += diff; + } } len += dlen; }