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 <anatoly.burakov@intel.com>
Acked-by: Thomas Monjalon <thomas.monjalon@6wind.com>
This commit is contained in:
Anatoly Burakov 2014-06-18 15:50:33 +01:00 committed by Thomas Monjalon
parent 2505824261
commit 4dc5d0ad3b

View File

@ -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));