From: Stephen Hemminger <stephen@networkplumber.org>
To: dev@dpdk.org
Cc: Stephen Hemminger <stephen@networkplumber.org>,
Thomas Monjalon <thomas@monjalon.net>,
Andrew Rybchenko <andrew.rybchenko@oktetlabs.ru>,
Ori Kam <orika@nvidia.com>
Subject: [PATCH 09/61] ethdev: replace use of rte_memcpy
Date: Wed, 19 Aug 2026 22:11:59 -0700 [thread overview]
Message-ID: <20260820052251.1453273-10-stephen@networkplumber.org> (raw)
In-Reply-To: <20260820052251.1453273-1-stephen@networkplumber.org>
The management of flows is better done using memcpy() or
structure assignment where compiler can do more bounds checks.
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
---
lib/ethdev/rte_ethdev.c | 3 +-
lib/ethdev/rte_flow.c | 104 ++++++++++++++++++----------------------
2 files changed, 47 insertions(+), 60 deletions(-)
diff --git a/lib/ethdev/rte_ethdev.c b/lib/ethdev/rte_ethdev.c
index 9efeaf77cb..faeb516093 100644
--- a/lib/ethdev/rte_ethdev.c
+++ b/lib/ethdev/rte_ethdev.c
@@ -16,7 +16,6 @@
#include <rte_log.h>
#include <rte_interrupts.h>
#include <rte_kvargs.h>
-#include <rte_memcpy.h>
#include <rte_common.h>
#include <rte_mempool.h>
#include <rte_malloc.h>
@@ -637,7 +636,7 @@ rte_eth_dev_owner_get(const uint16_t port_id, struct rte_eth_dev_owner *owner)
rte_spinlock_lock(rte_mcfg_ethdev_get_lock());
if (eth_dev_shared_data_prepare() != NULL) {
- rte_memcpy(owner, ðdev->data->owner, sizeof(*owner));
+ *owner = ethdev->data->owner;
ret = 0;
} else {
ret = -ENOMEM;
diff --git a/lib/ethdev/rte_flow.c b/lib/ethdev/rte_flow.c
index 60c9a3d06f..5b62a44052 100644
--- a/lib/ethdev/rte_flow.c
+++ b/lib/ethdev/rte_flow.c
@@ -66,7 +66,7 @@ rte_flow_conv_copy(void *buf, const void *data, const size_t size,
if (data == NULL)
return 0;
if (buf != NULL)
- rte_memcpy(buf, data, (size > sz ? sz : size));
+ memcpy(buf, data, RTE_MIN(size, sz));
if (rte_type && desc[type].desc_fn)
sz += desc[type].desc_fn(size > 0 ? buf : NULL, data,
size > sz ? size - sz : 0);
@@ -78,11 +78,8 @@ rte_flow_item_flex_conv(void *buf, const void *data, size_t size)
{
struct rte_flow_item_flex *dst = buf;
const struct rte_flow_item_flex *src = data;
- if (buf && size >= src->length) {
- dst->pattern = rte_memcpy
- ((void *)((uintptr_t)(dst + 1)), src->pattern,
- src->length);
- }
+ if (buf && size >= src->length)
+ dst->pattern = memcpy((void *)((uintptr_t)(dst + 1)), src->pattern, src->length);
return src->length;
}
@@ -662,16 +659,16 @@ rte_flow_conv_item_spec(void *buf, const size_t size,
mask.raw = item->mask ? item->mask : &rte_flow_item_raw_mask;
src.raw = data;
dst.raw = buf;
- rte_memcpy(dst.raw,
- (&(struct rte_flow_item_raw){
- .relative = src.raw->relative,
- .search = src.raw->search,
- .reserved = src.raw->reserved,
- .offset = src.raw->offset,
- .limit = src.raw->limit,
- .length = src.raw->length,
- }),
- size > sizeof(*dst.raw) ? sizeof(*dst.raw) : size);
+ memcpy(dst.raw,
+ (&(struct rte_flow_item_raw){
+ .relative = src.raw->relative,
+ .search = src.raw->search,
+ .reserved = src.raw->reserved,
+ .offset = src.raw->offset,
+ .limit = src.raw->limit,
+ .length = src.raw->length,
+ }),
+ RTE_MIN(size, sizeof(*dst.raw)));
off = sizeof(*dst.raw);
if (type == RTE_FLOW_CONV_ITEM_SPEC && spec.raw)
tmp = spec.raw->length & mask.raw->length;
@@ -688,9 +685,7 @@ rte_flow_conv_item_spec(void *buf, const size_t size,
off = RTE_ALIGN_CEIL(off, sizeof(*dst.raw->pattern));
if (size >= off + tmp) {
deep_src = (void *)((uintptr_t)dst.raw + off);
- dst.raw->pattern = rte_memcpy(deep_src,
- src.raw->pattern,
- tmp);
+ dst.raw->pattern = memcpy(deep_src, src.raw->pattern, tmp);
}
off += tmp;
}
@@ -704,9 +699,7 @@ rte_flow_conv_item_spec(void *buf, const size_t size,
tmp = spec.geneve_opt ? (spec.geneve_opt->option_len << 2) : 0;
if (size >= off + tmp && tmp > 0 && src.geneve_opt->data) {
deep_src = (void *)((uintptr_t)(dst.geneve_opt + 1));
- dst.geneve_opt->data = rte_memcpy(deep_src,
- src.geneve_opt->data,
- tmp);
+ dst.geneve_opt->data = memcpy(deep_src, src.geneve_opt->data, tmp);
}
off += tmp;
break;
@@ -756,32 +749,30 @@ rte_flow_conv_action_conf(void *buf, const size_t size,
case RTE_FLOW_ACTION_TYPE_RSS:
src.rss = action->conf;
dst.rss = buf;
- rte_memcpy(dst.rss,
- (&(struct rte_flow_action_rss){
- .func = src.rss->func,
- .level = src.rss->level,
- .types = src.rss->types,
- .key_len = src.rss->key_len,
- .queue_num = src.rss->queue_num,
- }),
- size > sizeof(*dst.rss) ? sizeof(*dst.rss) : size);
+ memcpy(dst.rss,
+ (&(struct rte_flow_action_rss){
+ .func = src.rss->func,
+ .level = src.rss->level,
+ .types = src.rss->types,
+ .key_len = src.rss->key_len,
+ .queue_num = src.rss->queue_num,
+ }),
+ RTE_MIN(size, sizeof(*dst.rss)));
off = sizeof(*dst.rss);
if (src.rss->key_len && src.rss->key) {
off = RTE_ALIGN_CEIL(off, sizeof(*dst.rss->key));
tmp = sizeof(*src.rss->key) * src.rss->key_len;
if (size >= (uint64_t)off + (uint64_t)tmp)
- dst.rss->key = rte_memcpy
- ((void *)((uintptr_t)dst.rss + off),
- src.rss->key, tmp);
+ dst.rss->key = memcpy((void *)((uintptr_t)dst.rss + off),
+ src.rss->key, tmp);
off += tmp;
}
if (src.rss->queue_num) {
off = RTE_ALIGN_CEIL(off, sizeof(*dst.rss->queue));
tmp = sizeof(*src.rss->queue) * src.rss->queue_num;
if (size >= (uint64_t)off + (uint64_t)tmp)
- dst.rss->queue = rte_memcpy
- ((void *)((uintptr_t)dst.rss + off),
- src.rss->queue, tmp);
+ dst.rss->queue = memcpy((void *)((uintptr_t)dst.rss + off),
+ src.rss->queue, tmp);
off += tmp;
}
break;
@@ -1023,20 +1014,19 @@ rte_flow_conv_rule(struct rte_flow_conv_rule *dst,
size_t off;
int ret;
- rte_memcpy(dst,
- (&(struct rte_flow_conv_rule){
- .attr = NULL,
- .pattern = NULL,
- .actions = NULL,
- }),
- size > sizeof(*dst) ? sizeof(*dst) : size);
+ memcpy(dst,
+ (&(struct rte_flow_conv_rule){
+ .attr = NULL,
+ .pattern = NULL,
+ .actions = NULL,
+ }),
+ RTE_MIN(size, sizeof(*dst)));
off = sizeof(*dst);
if (src->attr_ro) {
off = RTE_ALIGN_CEIL(off, sizeof(double));
if (size && size >= off + sizeof(*dst->attr))
- dst->attr = rte_memcpy
- ((void *)((uintptr_t)dst + off),
- src->attr_ro, sizeof(*dst->attr));
+ dst->attr = memcpy((void *)((uintptr_t)dst + off),
+ src->attr_ro, sizeof(*dst->attr));
off += sizeof(*dst->attr);
}
if (src->pattern_ro) {
@@ -1138,9 +1128,7 @@ rte_flow_conv(enum rte_flow_conv_op op,
break;
case RTE_FLOW_CONV_OP_ATTR:
attr = src;
- if (size > sizeof(*attr))
- size = sizeof(*attr);
- rte_memcpy(dst, attr, size);
+ memcpy(dst, attr, RTE_MIN(size, sizeof(*attr)));
ret = sizeof(*attr);
break;
case RTE_FLOW_CONV_OP_ITEM:
@@ -1232,14 +1220,14 @@ rte_flow_copy(struct rte_flow_desc *desc, size_t len,
if (ret < 0)
return 0;
ret += sizeof(*desc) - sizeof(*dst);
- rte_memcpy(desc,
- (&(struct rte_flow_desc){
- .size = ret,
- .attr = *attr,
- .items = dst_size ? dst->pattern : NULL,
- .actions = dst_size ? dst->actions : NULL,
- }),
- len > sizeof(*desc) ? sizeof(*desc) : len);
+ memcpy(desc,
+ (&(struct rte_flow_desc){
+ .size = ret,
+ .attr = *attr,
+ .items = dst_size ? dst->pattern : NULL,
+ .actions = dst_size ? dst->actions : NULL,
+ }),
+ RTE_MIN(len, sizeof(*desc)));
rte_flow_trace_copy(desc, len, attr, items, actions, ret);
--
2.53.0
next prev parent reply other threads:[~2026-08-20 5:23 UTC|newest]
Thread overview: 68+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-08-20 5:11 [PATCH 00/61] reduce use of rte_memcpy Stephen Hemminger
2026-08-20 5:11 ` [PATCH 01/61] devtools/cocci: add script to replace fixed size rte_memcpy Stephen Hemminger
2026-08-20 5:11 ` [PATCH 02/61] app/testpmd: replace rte_memcpy with memcpy Stephen Hemminger
2026-08-20 5:11 ` [PATCH 03/61] test: use memcpy instead of rte_memcpy Stephen Hemminger
2026-08-20 6:22 ` Morten Brørup
2026-08-20 5:11 ` [PATCH 04/61] app/graph: replace rte_memcpy with memcpy Stephen Hemminger
2026-08-20 5:11 ` [PATCH 05/61] lpm: remove unnecessary include of rte_memcpy.h Stephen Hemminger
2026-08-20 5:11 ` [PATCH 06/61] acl: " Stephen Hemminger
2026-08-20 5:11 ` [PATCH 07/61] drivers/bus: " Stephen Hemminger
2026-08-20 5:11 ` [PATCH 08/61] security: replace fixed size rte_memcpy Stephen Hemminger
2026-08-20 5:11 ` Stephen Hemminger [this message]
2026-08-20 5:12 ` [PATCH 10/61] net: replace use of rte_memcpy Stephen Hemminger
2026-08-20 5:12 ` [PATCH 11/61] pdcp: " Stephen Hemminger
2026-08-20 5:12 ` [PATCH 12/61] eventdev: replace fixed size rte_memcpy Stephen Hemminger
2026-08-20 5:12 ` [PATCH 13/61] eal: replace rte_memcpy of cpuset Stephen Hemminger
2026-08-20 5:12 ` [PATCH 14/61] cryptodev: replace use of rte_memcpy Stephen Hemminger
2026-08-20 5:12 ` [PATCH 15/61] drivers/raw: use memcpy for fixed size data Stephen Hemminger
2026-08-20 5:12 ` [PATCH 16/61] test-pipeline: replace use of rte_memcpy Stephen Hemminger
2026-08-20 5:12 ` [PATCH 17/61] net/af_xdp: " Stephen Hemminger
2026-08-20 5:12 ` [PATCH 18/61] net/avp: " Stephen Hemminger
2026-08-20 5:12 ` [PATCH 19/61] net/axgbe: " Stephen Hemminger
2026-08-20 5:12 ` [PATCH 20/61] net/bnx2x: " Stephen Hemminger
2026-08-20 5:12 ` [PATCH 21/61] net/bnxt: " Stephen Hemminger
2026-08-20 5:12 ` [PATCH 22/61] net/bonding: " Stephen Hemminger
2026-08-20 5:12 ` [PATCH 23/61] net/cnxk: " Stephen Hemminger
2026-08-20 5:12 ` [PATCH 24/61] net/cxgbe: " Stephen Hemminger
2026-08-20 5:12 ` [PATCH 25/61] net/dpaa2: " Stephen Hemminger
2026-08-20 5:12 ` [PATCH 26/61] net/enic: " Stephen Hemminger
2026-08-20 9:05 ` Hyong Youb Kim (hyonkim)
2026-08-20 5:12 ` [PATCH 27/61] net/failsafe: " Stephen Hemminger
2026-08-20 5:12 ` [PATCH 28/61] net/gve: " Stephen Hemminger
2026-08-20 5:12 ` [PATCH 29/61] net/hinic: " Stephen Hemminger
2026-08-20 5:12 ` [PATCH 30/61] net/hns3: " Stephen Hemminger
2026-08-20 5:12 ` [PATCH 31/61] net/mlx5: " Stephen Hemminger
2026-08-20 5:12 ` [PATCH 32/61] net/mvpp2: " Stephen Hemminger
2026-08-20 5:12 ` [PATCH 33/61] net/netvsc: " Stephen Hemminger
2026-08-20 5:12 ` [PATCH 34/61] net/nfp: " Stephen Hemminger
2026-08-20 5:12 ` [PATCH 35/61] net/ngbe: " Stephen Hemminger
2026-08-20 5:12 ` [PATCH 36/61] net/ntnic: " Stephen Hemminger
2026-08-20 5:12 ` [PATCH 37/61] net/null: " Stephen Hemminger
2026-08-20 5:12 ` [PATCH 38/61] net/qede: " Stephen Hemminger
2026-08-20 5:12 ` [PATCH 39/61] net/ring: " Stephen Hemminger
2026-08-20 5:12 ` [PATCH 40/61] net/sfc: " Stephen Hemminger
2026-08-20 5:12 ` [PATCH 41/61] net/txgbe: " Stephen Hemminger
2026-08-20 5:12 ` [PATCH 42/61] net/vhost: " Stephen Hemminger
2026-08-20 5:12 ` [PATCH 43/61] net/virtio: " Stephen Hemminger
2026-08-20 5:12 ` [PATCH 44/61] net/sxe2: " Stephen Hemminger
2026-08-20 5:12 ` [PATCH 45/61] net/zxdh: " Stephen Hemminger
2026-08-20 5:12 ` [PATCH 46/61] net/memif: use memcpy for fixed size data Stephen Hemminger
2026-08-20 5:12 ` [PATCH 47/61] net/ice: " Stephen Hemminger
2026-08-20 5:12 ` [PATCH 48/61] test-bbdev: remove unnecessary include rte_memcpy.h Stephen Hemminger
2026-08-20 5:12 ` [PATCH 49/61] drivers/mempool: use memcpy for fixed size data Stephen Hemminger
2026-08-20 5:12 ` [PATCH 50/61] ml/cnxk: " Stephen Hemminger
2026-08-20 5:12 ` [PATCH 51/61] drivers/event: " Stephen Hemminger
2026-08-20 5:12 ` [PATCH 52/61] baseband/la12xx: " Stephen Hemminger
2026-08-20 5:12 ` [PATCH 53/61] baseband/acc: replace use of rte_memcpy Stephen Hemminger
2026-08-20 5:12 ` [PATCH 54/61] drivers/*/qat: use memcpy for fixed size data Stephen Hemminger
2026-08-20 5:12 ` [PATCH 55/61] hash: replace use of rte_memcpy Stephen Hemminger
2026-08-20 5:12 ` [PATCH 56/61] rib: remove rte_memcpy include Stephen Hemminger
2026-08-20 5:12 ` [PATCH 57/61] pcapng: replace use of rte_memcpy Stephen Hemminger
2026-08-20 5:12 ` [PATCH 58/61] efd: " Stephen Hemminger
2026-08-20 5:12 ` [PATCH 59/61] net/xsc: " Stephen Hemminger
2026-08-20 5:12 ` [PATCH 60/61] net/pcap: " Stephen Hemminger
2026-08-20 5:12 ` [PATCH 61/61] power: " Stephen Hemminger
2026-08-20 7:31 ` [PATCH 00/61] reduce " Morten Brørup
2026-08-20 8:16 ` Bruce Richardson
2026-08-20 8:46 ` Konstantin Ananyev
2026-08-20 9:03 ` Morten Brørup
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260820052251.1453273-10-stephen@networkplumber.org \
--to=stephen@networkplumber.org \
--cc=andrew.rybchenko@oktetlabs.ru \
--cc=dev@dpdk.org \
--cc=orika@nvidia.com \
--cc=thomas@monjalon.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox