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;
}