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:
parent
2505824261
commit
4dc5d0ad3b
@ -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));
|
||||
|
Loading…
Reference in New Issue
Block a user