On Fri, Mar 24, 2017 at 12:58:29PM -0400, David Hill wrote:
> This diff converts the existing three bcopy's to memcpy or memmove.
> The memcpy's are on freshly malloc'd memory so no overlap.
As tc and tdb are properly aligned malloc(9)ed data and tc_dst and
tdb_dst are sockaddr_union fields contained in this storage, I think
we can just say "tc->tc_dst = tdb->tdb_dst" and the compiler knows
what to do.
> OK?
OK bluhm@ for memmove(9)ing the mbuf data.
> Index: netinet/ip_ipcomp.c
> ===================================================================
> RCS file: /cvs/src/sys/netinet/ip_ipcomp.c,v
> retrieving revision 1.55
> diff -u -p -r1.55 ip_ipcomp.c
> --- netinet/ip_ipcomp.c 17 Feb 2017 14:49:03 -0000 1.55
> +++ netinet/ip_ipcomp.c 24 Mar 2017 16:54:37 -0000
> @@ -181,7 +181,7 @@ ipcomp_input(struct mbuf *m, struct tdb
> tc->tc_spi = tdb->tdb_spi;
> tc->tc_proto = IPPROTO_IPCOMP;
> tc->tc_rdomain = tdb->tdb_rdomain;
> - bcopy(&tdb->tdb_dst, &tc->tc_dst, sizeof(union sockaddr_union));
> + memcpy(&tc->tc_dst, &tdb->tdb_dst, sizeof(union sockaddr_union));
>
> return crypto_dispatch(crp);
> }
> @@ -317,8 +317,8 @@ ipcomp_input_cb(struct cryptop *crp)
> /* Finally, let's relink */
> m1->m_next = mo;
> } else {
> - bcopy(mtod(m1, u_char *) + roff + hlen,
> - mtod(m1, u_char *) + roff,
> + memmove(mtod(m1, u_char *) + roff,
> + mtod(m1, u_char *) + roff + hlen,
> m1->m_len - (roff + hlen));
> m1->m_len -= hlen;
> m->m_pkthdr.len -= hlen;
> @@ -501,7 +501,7 @@ ipcomp_output(struct mbuf *m, struct tdb
> tc->tc_proto = tdb->tdb_sproto;
> tc->tc_skip = skip;
> tc->tc_rdomain = tdb->tdb_rdomain;
> - bcopy(&tdb->tdb_dst, &tc->tc_dst, sizeof(union sockaddr_union));
> + memcpy(&tc->tc_dst, &tdb->tdb_dst, sizeof(union sockaddr_union));
>
> /* Crypto operation descriptor */
> crp->crp_ilen = m->m_pkthdr.len; /* Total input length */