From: Anatoly Burakov Date: Wed, 18 Jun 2014 14:50:33 +0000 (+0100) Subject: ip_frag: custom memmove X-Git-Tag: spdx-start~10587 X-Git-Url: http://git.droids-corp.org/?a=commitdiff_plain;h=4dc5d0ad3bb6c4d3b2fcba706d6fbed9ef744d70;p=dpdk.git ip_frag: custom memmove Some implementations of memmove may make a copy of src before writing to dst. We avoid that by explicitly writing from src to dst backwards. Signed-off-by: Anatoly Burakov Acked-by: Thomas Monjalon --- diff --git a/lib/librte_ip_frag/rte_ipv6_reassembly.c b/lib/librte_ip_frag/rte_ipv6_reassembly.c index c6228275f3..3f069604b6 100644 --- a/lib/librte_ip_frag/rte_ipv6_reassembly.c +++ b/lib/librte_ip_frag/rte_ipv6_reassembly.c @@ -45,6 +45,16 @@ * */ +static inline void +ip_frag_memmove(char *dst, char *src, int len) +{ + int i; + + /* go backwards to make sure we don't overwrite anything important */ + for (i = len - 1; i >= 0; i--) + dst[i] = src[i]; +} + /* * Reassemble fragments into one packet. */ @@ -115,7 +125,7 @@ ipv6_frag_reassemble(const struct ip_frag_pkt *fp) frag_hdr = (struct ipv6_extension_fragment *) (ip_hdr + 1); ip_hdr->proto = frag_hdr->next_header; - memmove(rte_pktmbuf_mtod(m, char*) + sizeof(*frag_hdr), + ip_frag_memmove(rte_pktmbuf_mtod(m, char*) + sizeof(*frag_hdr), rte_pktmbuf_mtod(m, char*), move_len); rte_pktmbuf_adj(m, sizeof(*frag_hdr));