patch 'mbuf: fix packet copy' has been queued to stable release 24.11.5
luca.boccassi at gmail.com
luca.boccassi at gmail.com
Fri Feb 20 15:56:12 CET 2026
Hi,
FYI, your patch has been queued to stable release 24.11.5
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 02/22/26. So please
shout if anyone has objections.
Also note that after the patch there's a diff of the upstream commit vs the
patch applied to the branch. This will indicate if there was any rebasing
needed to apply to the stable branch. If there were code changes for rebasing
(ie: not only metadata diffs), please double check that the rebase was
correctly done.
Queued patches are on a temporary branch at:
https://github.com/bluca/dpdk-stable
This queued commit can be viewed at:
https://github.com/bluca/dpdk-stable/commit/b40186145941819b7ebb6360efe383433afde39b
Thanks.
Luca Boccassi
---
>From b40186145941819b7ebb6360efe383433afde39b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Morten=20Br=C3=B8rup?= <mb at smartsharesystems.com>
Date: Tue, 20 Jan 2026 07:24:14 +0000
Subject: [PATCH] mbuf: fix packet copy
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
[ upstream commit 8a75c9af639b68a594d1f0e58b650c54974cf3db ]
Requests for copying the at the end of a packet incorrectly returned NULL,
as if copying past the end of a packet.
When allocating the mbuf for the copy from a mempool using pinned external
buffers, the external flag in this mbuf was not preserved.
Fixes: c3a90c381daa ("mbuf: add a copy routine")
Signed-off-by: Morten Brørup <mb at smartsharesystems.com>
Acked-by: Konstantin Ananyev <konstantin.ananyev at huawei.com>
---
app/test/test_mbuf.c | 20 ++++++++++++++++++++
lib/mbuf/rte_mbuf.c | 10 +++++++---
2 files changed, 27 insertions(+), 3 deletions(-)
diff --git a/app/test/test_mbuf.c b/app/test/test_mbuf.c
index 17be977f31..19b49cec12 100644
--- a/app/test/test_mbuf.c
+++ b/app/test/test_mbuf.c
@@ -541,6 +541,26 @@ test_pktmbuf_copy(struct rte_mempool *pktmbuf_pool,
rte_pktmbuf_free(copy2);
+ /* test offset copy at the end */
+ copy2 = rte_pktmbuf_copy(copy, pktmbuf_pool,
+ 2 * sizeof(uint32_t), UINT32_MAX);
+ if (copy2 == NULL)
+ GOTO_FAIL("cannot copy at the end of the copy\n");
+
+ if (rte_pktmbuf_pkt_len(copy2) != 0)
+ GOTO_FAIL("copy at the end, length incorrect\n");
+
+ if (rte_pktmbuf_data_len(copy2) != 0)
+ GOTO_FAIL("copy at the end, data length incorrect\n");
+
+ rte_pktmbuf_free(copy2);
+
+ /* test offset copy past the end */
+ copy2 = rte_pktmbuf_copy(copy, pktmbuf_pool,
+ 2 * sizeof(uint32_t) + 1, UINT32_MAX);
+ if (copy2 != NULL)
+ GOTO_FAIL("can copy past the end of the copy\n");
+
/* test truncation copy */
copy2 = rte_pktmbuf_copy(copy, pktmbuf_pool,
0, sizeof(uint32_t));
diff --git a/lib/mbuf/rte_mbuf.c b/lib/mbuf/rte_mbuf.c
index 559d5ad8a7..d41d2bac3d 100644
--- a/lib/mbuf/rte_mbuf.c
+++ b/lib/mbuf/rte_mbuf.c
@@ -599,7 +599,7 @@ rte_pktmbuf_copy(const struct rte_mbuf *m, struct rte_mempool *mp,
__rte_mbuf_sanity_check(m, 1);
/* check for request to copy at offset past end of mbuf */
- if (unlikely(off >= m->pkt_len))
+ if (unlikely(off > m->pkt_len))
return NULL;
mc = rte_pktmbuf_alloc(mp);
@@ -612,8 +612,12 @@ rte_pktmbuf_copy(const struct rte_mbuf *m, struct rte_mempool *mp,
__rte_pktmbuf_copy_hdr(mc, m);
- /* copied mbuf is not indirect or external */
- mc->ol_flags = m->ol_flags & ~(RTE_MBUF_F_INDIRECT|RTE_MBUF_F_EXTERNAL);
+ /*
+ * copy flags except indirect and external,
+ * while preserving flags of newly allocated mbuf
+ * (specifically RTE_MBUF_F_EXTERNAL if using pinned external buffer)
+ */
+ mc->ol_flags |= m->ol_flags & ~(RTE_MBUF_F_INDIRECT | RTE_MBUF_F_EXTERNAL);
prev = &mc->next;
m_last = mc;
--
2.47.3
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2026-02-20 14:55:45.941839711 +0000
+++ 0070-mbuf-fix-packet-copy.patch 2026-02-20 14:55:43.272192227 +0000
@@ -1 +1 @@
-From 8a75c9af639b68a594d1f0e58b650c54974cf3db Mon Sep 17 00:00:00 2001
+From b40186145941819b7ebb6360efe383433afde39b Mon Sep 17 00:00:00 2001
@@ -8,0 +9,2 @@
+[ upstream commit 8a75c9af639b68a594d1f0e58b650c54974cf3db ]
+
@@ -25 +27 @@
-index 7afaee8067..a41d2d0f97 100644
+index 17be977f31..19b49cec12 100644
@@ -56 +58 @@
-index 0d931c7a15..a5d16e4c97 100644
+index 559d5ad8a7..d41d2bac3d 100644
@@ -59 +61 @@
-@@ -675,7 +675,7 @@ rte_pktmbuf_copy(const struct rte_mbuf *m, struct rte_mempool *mp,
+@@ -599,7 +599,7 @@ rte_pktmbuf_copy(const struct rte_mbuf *m, struct rte_mempool *mp,
@@ -68 +70 @@
-@@ -688,8 +688,12 @@ rte_pktmbuf_copy(const struct rte_mbuf *m, struct rte_mempool *mp,
+@@ -612,8 +612,12 @@ rte_pktmbuf_copy(const struct rte_mbuf *m, struct rte_mempool *mp,
More information about the stable
mailing list