Hello -
Here are the final bcopy->memcpy conversions in netinet6 that I am
comfortable with. There is also one (bcmp()) to (memcmp() != 0)
conversion since the memory is not overlapping.
This, with the last netinet6 diff, has dropped the number of bcopy()
calls from 62 to 29 in netinet6/
Index: icmp6.c
===================================================================
RCS file: /cvs/src/sys/netinet6/icmp6.c,v
retrieving revision 1.190
diff -u -p -r1.190 icmp6.c
--- icmp6.c 24 Aug 2016 09:38:29 -0000 1.190
+++ icmp6.c 20 Sep 2016 01:00:36 -0000
@@ -1401,7 +1401,7 @@ icmp6_redirect_input(struct mbuf *m, int
bzero(&sin6, sizeof(sin6));
sin6.sin6_family = AF_INET6;
sin6.sin6_len = sizeof(struct sockaddr_in6);
- bcopy(&reddst6, &sin6.sin6_addr, sizeof(reddst6));
+ memcpy(&sin6.sin6_addr, &reddst6, sizeof(reddst6));
rt = rtalloc(sin6tosa(&sin6), 0, m->m_pkthdr.ph_rtableid);
if (rt) {
if (rt->rt_gateway == NULL ||
@@ -1509,9 +1509,9 @@ icmp6_redirect_input(struct mbuf *m, int
sdst.sin6_family = sgw.sin6_family = ssrc.sin6_family =
AF_INET6;
sdst.sin6_len = sgw.sin6_len = ssrc.sin6_len =
sizeof(struct sockaddr_in6);
- bcopy(&redtgt6, &sgw.sin6_addr, sizeof(struct in6_addr));
- bcopy(&reddst6, &sdst.sin6_addr, sizeof(struct in6_addr));
- bcopy(&src6, &ssrc.sin6_addr, sizeof(struct in6_addr));
+ memcpy(&sgw.sin6_addr, &redtgt6, sizeof(struct in6_addr));
+ memcpy(&sdst.sin6_addr, &reddst6, sizeof(struct in6_addr));
+ memcpy(&ssrc.sin6_addr, &src6, sizeof(struct in6_addr));
rtredirect(sin6tosa(&sdst), sin6tosa(&sgw), sin6tosa(&ssrc),
&newrt, m->m_pkthdr.ph_rtableid);
@@ -1528,7 +1528,7 @@ icmp6_redirect_input(struct mbuf *m, int
bzero(&sdst, sizeof(sdst));
sdst.sin6_family = AF_INET6;
sdst.sin6_len = sizeof(struct sockaddr_in6);
- bcopy(&reddst6, &sdst.sin6_addr, sizeof(struct in6_addr));
+ memcpy(&sdst.sin6_addr, &reddst6, sizeof(struct in6_addr));
pfctlinput(PRC_REDIRECT_HOST, sin6tosa(&sdst));
}
Index: in6.c
===================================================================
RCS file: /cvs/src/sys/netinet6/in6.c,v
retrieving revision 1.192
diff -u -p -r1.192 in6.c
--- in6.c 4 Sep 2016 10:32:01 -0000 1.192
+++ in6.c 20 Sep 2016 01:00:36 -0000
@@ -1029,9 +1029,9 @@ in6_lifaddr_ioctl(u_long cmd, caddr_t da
/* copy args to in6_aliasreq, perform ioctl(SIOCAIFADDR_IN6). */
bzero(&ifra, sizeof(ifra));
- bcopy(iflr->iflr_name, ifra.ifra_name, sizeof(ifra.ifra_name));
+ memcpy(ifra.ifra_name, iflr->iflr_name, sizeof(ifra.ifra_name));
- bcopy(&iflr->addr, &ifra.ifra_addr,
+ memcpy(&ifra.ifra_addr, &iflr->addr,
((struct sockaddr *)&iflr->addr)->sa_len);
if (hostid) {
/* fill in hostid part */
@@ -1042,7 +1042,7 @@ in6_lifaddr_ioctl(u_long cmd, caddr_t da
}
if (((struct sockaddr *)&iflr->dstaddr)->sa_family) { /*XXX*/
- bcopy(&iflr->dstaddr, &ifra.ifra_dstaddr,
+ memcpy(&ifra.ifra_dstaddr, &iflr->dstaddr,
((struct sockaddr *)&iflr->dstaddr)->sa_len);
if (hostid) {
ifra.ifra_dstaddr.sin6_addr.s6_addr32[2] =
@@ -1073,14 +1073,14 @@ in6_lifaddr_ioctl(u_long cmd, caddr_t da
in6_prefixlen2mask(&mask, iflr->prefixlen);
sin6 = (struct sockaddr_in6 *)&iflr->addr;
- bcopy(&sin6->sin6_addr, &match, sizeof(match));
+ memcpy(&match, &sin6->sin6_addr, sizeof(match));
match.s6_addr32[0] &= mask.s6_addr32[0];
match.s6_addr32[1] &= mask.s6_addr32[1];
match.s6_addr32[2] &= mask.s6_addr32[2];
match.s6_addr32[3] &= mask.s6_addr32[3];
/* if you set extra bits, that's wrong */
- if (bcmp(&match, &sin6->sin6_addr, sizeof(match)))
+ if (memcmp(&match, &sin6->sin6_addr, sizeof(match)) !=
0)
return EINVAL;
cmp = 1;
@@ -1092,7 +1092,7 @@ in6_lifaddr_ioctl(u_long cmd, caddr_t da
/* on deleting an address, do exact match */
in6_prefixlen2mask(&mask, 128);
sin6 = (struct sockaddr_in6 *)&iflr->addr;
- bcopy(&sin6->sin6_addr, &match, sizeof(match));
+ memcpy(&match, &sin6->sin6_addr, sizeof(match));
cmp = 1;
}
@@ -1104,7 +1104,7 @@ in6_lifaddr_ioctl(u_long cmd, caddr_t da
if (!cmp)
break;
- bcopy(IFA_IN6(ifa), &candidate, sizeof(candidate));
+ memcpy(&candidate, IFA_IN6(ifa), sizeof(candidate));
candidate.s6_addr32[0] &= mask.s6_addr32[0];
candidate.s6_addr32[1] &= mask.s6_addr32[1];
candidate.s6_addr32[2] &= mask.s6_addr32[2];
@@ -1136,19 +1136,19 @@ in6_lifaddr_ioctl(u_long cmd, caddr_t da
/* fill in6_aliasreq and do ioctl(SIOCDIFADDR_IN6) */
bzero(&ifra, sizeof(ifra));
- bcopy(iflr->iflr_name, ifra.ifra_name,
+ memcpy(ifra.ifra_name, iflr->iflr_name,
sizeof(ifra.ifra_name));
- bcopy(&ia6->ia_addr, &ifra.ifra_addr,
+ memcpy(&ifra.ifra_addr, &ia6->ia_addr,
ia6->ia_addr.sin6_len);
if ((ifp->if_flags & IFF_POINTOPOINT) != 0) {
- bcopy(&ia6->ia_dstaddr, &ifra.ifra_dstaddr,
+ memcpy(&ifra.ifra_dstaddr, &ia6->ia_dstaddr,
ia6->ia_dstaddr.sin6_len);
} else {
bzero(&ifra.ifra_dstaddr,
sizeof(ifra.ifra_dstaddr));
}
- bcopy(&ia6->ia_prefixmask, &ifra.ifra_dstaddr,
+ memcpy(&ifra.ifra_dstaddr, &ia6->ia_prefixmask,
ia6->ia_prefixmask.sin6_len);
ifra.ifra_flags = ia6->ia6_flags;
Index: in6_ifattach.c
===================================================================
RCS file: /cvs/src/sys/netinet6/in6_ifattach.c,v
retrieving revision 1.100
diff -u -p -r1.100 in6_ifattach.c
--- in6_ifattach.c 30 Jun 2016 08:19:03 -0000 1.100
+++ in6_ifattach.c 20 Sep 2016 01:00:36 -0000
@@ -99,7 +99,7 @@ get_last_resort_ifid(struct ifnet *ifp,
SHA512Final(digest, &ctx);
/* assumes sizeof(digest) > sizeof(ifid) */
- bcopy(digest, &in6->s6_addr[8], 8);
+ memcpy(&in6->s6_addr[8], digest, 8);
/* make sure to set "u" bit to local, and "g" bit to individual. */
in6->s6_addr[8] &= ~EUI64_GBIT; /* g bit to "individual" */
@@ -453,7 +453,7 @@ in6_nigroup(struct ifnet *ifp, const cha
sa6->sin6_addr.s6_addr16[0] = htons(0xff02);
sa6->sin6_addr.s6_addr16[1] = htons(ifp->if_index);
sa6->sin6_addr.s6_addr8[11] = 2;
- bcopy(digest, &sa6->sin6_addr.s6_addr32[3],
+ memcpy(&sa6->sin6_addr.s6_addr32[3], digest,
sizeof(sa6->sin6_addr.s6_addr32[3]));
return 0;
Index: ip6_input.c
===================================================================
RCS file: /cvs/src/sys/netinet6/ip6_input.c,v
retrieving revision 1.168
diff -u -p -r1.168 ip6_input.c
--- ip6_input.c 24 Aug 2016 09:41:12 -0000 1.168
+++ ip6_input.c 20 Sep 2016 01:00:37 -0000
@@ -794,7 +794,7 @@ ip6_process_hopopts(struct mbuf *m, u_in
return (-1);
}
optlen = IP6OPT_RTALERT_LEN;
- bcopy((caddr_t)(opt + 2), (caddr_t)&rtalert_val, 2);
+ memcpy((caddr_t)&rtalert_val, (caddr_t)(opt + 2), 2);
*rtalertp = ntohs(rtalert_val);
break;
case IP6OPT_JUMBO:
@@ -827,9 +827,9 @@ ip6_process_hopopts(struct mbuf *m, u_in
/*
* We may see jumbolen in unaligned location, so
- * we'd need to perform bcopy().
+ * we'd need to perform memcpy().
*/
- bcopy(opt + 2, &jumboplen, sizeof(jumboplen));
+ memcpy(&jumboplen, opt + 2, sizeof(jumboplen));
jumboplen = (u_int32_t)htonl(jumboplen);
#if 1
@@ -952,7 +952,7 @@ ip6_savecontrol(struct inpcb *in6p, stru
/* RFC 2292 sec. 5 */
if ((in6p->inp_flags & IN6P_PKTINFO) != 0) {
struct in6_pktinfo pi6;
- bcopy(&ip6->ip6_dst, &pi6.ipi6_addr, sizeof(struct in6_addr));
+ memcpy(&pi6.ipi6_addr, &ip6->ip6_dst, sizeof(struct in6_addr));
if (IN6_IS_SCOPE_EMBED(&pi6.ipi6_addr))
pi6.ipi6_addr.s6_addr16[1] = 0;
pi6.ipi6_ifindex = m ? m->m_pkthdr.ph_ifidx : 0;
Index: mld6.c
===================================================================
RCS file: /cvs/src/sys/netinet6/mld6.c,v
retrieving revision 1.48
diff -u -p -r1.48 mld6.c
--- mld6.c 5 Jul 2016 10:17:14 -0000 1.48
+++ mld6.c 20 Sep 2016 01:00:37 -0000
@@ -109,7 +109,7 @@ mld6_init(void)
hbh_buf[3] = 0;
hbh_buf[4] = IP6OPT_ROUTER_ALERT;
hbh_buf[5] = IP6OPT_RTALERT_LEN - 2;
- bcopy((caddr_t)&rtalert_code, &hbh_buf[6], sizeof(u_int16_t));
+ memcpy(&hbh_buf[6], (caddr_t)&rtalert_code, sizeof(u_int16_t));
ip6_opts.ip6po_hbh = hbh;
}
Index: nd6_rtr.c
===================================================================
RCS file: /cvs/src/sys/netinet6/nd6_rtr.c,v
retrieving revision 1.145
diff -u -p -r1.145 nd6_rtr.c
--- nd6_rtr.c 8 Sep 2016 09:02:42 -0000 1.145
+++ nd6_rtr.c 20 Sep 2016 01:00:37 -0000
@@ -1914,7 +1914,7 @@ in6_ifadd(struct nd_prefix *pr, int priv
ifra.ifra_addr.sin6_family = AF_INET6;
ifra.ifra_addr.sin6_len = sizeof(struct sockaddr_in6);
/* prefix */
- bcopy(&pr->ndpr_prefix.sin6_addr, &ifra.ifra_addr.sin6_addr,
+ memcpy(&ifra.ifra_addr.sin6_addr, &pr->ndpr_prefix.sin6_addr,
sizeof(ifra.ifra_addr.sin6_addr));
ifra.ifra_addr.sin6_addr.s6_addr32[0] &= mask.s6_addr32[0];
ifra.ifra_addr.sin6_addr.s6_addr32[1] &= mask.s6_addr32[1];
@@ -1924,7 +1924,7 @@ in6_ifadd(struct nd_prefix *pr, int priv
/* interface ID */
if (privacy) {
ifra.ifra_flags |= IN6_IFF_PRIVACY;
- bcopy(&pr->ndpr_prefix.sin6_addr, &rand_ifid,
+ memcpy(&rand_ifid, &pr->ndpr_prefix.sin6_addr,
sizeof(rand_ifid));
in6_get_rand_ifid(ifp, &rand_ifid);
ifra.ifra_addr.sin6_addr.s6_addr32[0] |=
@@ -1949,7 +1949,7 @@ in6_ifadd(struct nd_prefix *pr, int priv
/* new prefix mask. */
ifra.ifra_prefixmask.sin6_len = sizeof(struct sockaddr_in6);
ifra.ifra_prefixmask.sin6_family = AF_INET6;
- bcopy(&mask, &ifra.ifra_prefixmask.sin6_addr,
+ memcpy(&ifra.ifra_prefixmask.sin6_addr, &mask,
sizeof(ifra.ifra_prefixmask.sin6_addr));
/*