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