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