* Re: [dpdk-dev] [RFC 3/3] app/testpmd: fix hex string parser in flow commands
@ 2021-09-29 12:22 Singh, Aman Deep
2021-09-29 13:30 ` Slava Ovsiienko
0 siblings, 1 reply; 3+ messages in thread
From: Singh, Aman Deep @ 2021-09-29 12:22 UTC (permalink / raw)
To: viacheslavo; +Cc: dev, orika, stable
Hi Ovsiienko,
Can you please provide the flow command which causes "segmentation fault".
Thanks
Aman
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [dpdk-dev] [RFC 3/3] app/testpmd: fix hex string parser in flow commands
2021-09-29 12:22 [dpdk-dev] [RFC 3/3] app/testpmd: fix hex string parser in flow commands Singh, Aman Deep
@ 2021-09-29 13:30 ` Slava Ovsiienko
0 siblings, 0 replies; 3+ messages in thread
From: Slava Ovsiienko @ 2021-09-29 13:30 UTC (permalink / raw)
To: Singh, Aman Deep; +Cc: dev, Ori Kam, stable
Hi, Aman
An example:
testpmd> flow create 0 ingress pattern eth / end actions rss key 0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef queues 0 end / end
Program received signal SIGSEGV, Segmentation fault.
0x00007ffff5de366d in __memset_sse2 () from /lib64/libc.so.6
Missing separate debuginfos, use: debuginfo-install elfutils-libelf-0.170-4.el7.x86_64 glibc-2.17-222.el7.x86_64 jansson-2.10-1.el7.x86_64 libnl3-3.2.28-4.el7.x86_64 numactl-libs-2.0.9-7.el7.x86_64 openssl-libs-1.0.2k-12.el7.x86_64 zlib-1.2.7-17.el7.x86_64
(gdb)
With best regards,
Slava
From: Singh, Aman Deep <aman.deep.singh@intel.com>
Sent: Wednesday, September 29, 2021 15:23
To: Slava Ovsiienko <viacheslavo@nvidia.com>
Cc: dev@dpdk.org; Ori Kam <orika@nvidia.com>; stable@dpdk.org
Subject: Re: [dpdk-dev] [RFC 3/3] app/testpmd: fix hex string parser in flow commands
Hi Ovsiienko,
Can you please provide the flow command which causes "segmentation fault".
Thanks
Aman
^ permalink raw reply [flat|nested] 3+ messages in thread
* [dpdk-dev] [RFC 1/3] ethdev: update modify field flow action
@ 2021-09-10 14:16 Viacheslav Ovsiienko
2021-09-10 14:16 ` [dpdk-dev] [RFC 3/3] app/testpmd: fix hex string parser in flow commands Viacheslav Ovsiienko
0 siblings, 1 reply; 3+ messages in thread
From: Viacheslav Ovsiienko @ 2021-09-10 14:16 UTC (permalink / raw)
To: dev; +Cc: orika
The generic modify field flow action introduced in [1] has
some issues related to the immediate source operand:
- immediate source can be presented either as an unsigned
64-bit integer or pointer to data pattern in memory.
There was no explicit pointer field defined in the union
- the byte ordering for 64-bit integer was not specified.
Many fields have lesser lengths and byte ordering
is crucial.
- how the bit offset is applied to the immediate source
field was not defined and documented
- 64-bit integer size is not enough to provide MAC and
IPv6 addresses
In order to cover the issues and exclude any ambiguities
the following is done:
- introduce the explicit pointer field
in rte_flow_action_modify_data structure
- replace the 64-bit unsigned integer with 16-byte array
- update the modify field flow action documentation
[1] commit 73b68f4c54a0 ("ethdev: introduce generic modify flow action")
Signed-off-by: Viacheslav Ovsiienko <viacheslavo@nvidia.com>
---
doc/guides/prog_guide/rte_flow.rst | 8 ++++++++
doc/guides/rel_notes/release_21_11.rst | 7 +++++++
lib/ethdev/rte_flow.h | 15 ++++++++++++---
3 files changed, 27 insertions(+), 3 deletions(-)
diff --git a/doc/guides/prog_guide/rte_flow.rst b/doc/guides/prog_guide/rte_flow.rst
index 2b42d5ec8c..a54760a7b4 100644
--- a/doc/guides/prog_guide/rte_flow.rst
+++ b/doc/guides/prog_guide/rte_flow.rst
@@ -2835,6 +2835,14 @@ a packet to any other part of it.
``value`` sets an immediate value to be used as a source or points to a
location of the value in memory. It is used instead of ``level`` and ``offset``
for ``RTE_FLOW_FIELD_VALUE`` and ``RTE_FLOW_FIELD_POINTER`` respectively.
+The data in memory should be presented exactly in the same byte order and
+length as in the relevant flow item, i.e. data for field with type
+RTE_FLOW_FIELD_MAC_DST should follow the conventions of dst field
+in rte_flow_item_eth structure, with type RTE_FLOW_FIELD_IPV6_SRC -
+rte_flow_item_ipv6 conventions, and so on. The bitfield exatracted from the
+memory being applied as second operation parameter is defined by width and
+the destination field offset. If the field size is large than 16 bytes the
+pattern can be provided as pointer only.
.. _table_rte_flow_action_modify_field:
diff --git a/doc/guides/rel_notes/release_21_11.rst b/doc/guides/rel_notes/release_21_11.rst
index d707a554ef..fdeba27e14 100644
--- a/doc/guides/rel_notes/release_21_11.rst
+++ b/doc/guides/rel_notes/release_21_11.rst
@@ -84,6 +84,10 @@ API Changes
Also, make sure to start the actual text at the margin.
=======================================================
+* ethdev: ``rte_flow_action_modify_data`` structure udpdated, immediate data
+ array is extended, data pointer field is explicitly added to union, the
+ action behavior is defined in more strict fashion and documentation uddated.
+
ABI Changes
-----------
@@ -101,6 +105,9 @@ ABI Changes
=======================================================
+* ethdev: ``rte_flow_action_modify_data`` structure udpdated.
+
+
Known Issues
------------
diff --git a/lib/ethdev/rte_flow.h b/lib/ethdev/rte_flow.h
index 70f455d47d..50e6f34579 100644
--- a/lib/ethdev/rte_flow.h
+++ b/lib/ethdev/rte_flow.h
@@ -3204,6 +3204,9 @@ enum rte_flow_field_id {
};
/**
+ * @warning
+ * @b EXPERIMENTAL: this structure may change without prior notice
+ *
* Field description for MODIFY_FIELD action.
*/
struct rte_flow_action_modify_data {
@@ -3217,10 +3220,16 @@ struct rte_flow_action_modify_data {
uint32_t offset;
};
/**
- * Immediate value for RTE_FLOW_FIELD_VALUE or
- * memory address for RTE_FLOW_FIELD_POINTER.
+ * Immediate value for RTE_FLOW_FIELD_VALUE, presented in the
+ * same byte order and length as in relevant rte_flow_item_xxx.
*/
- uint64_t value;
+ uint8_t value[16];
+ /*
+ * Memory address for RTE_FLOW_FIELD_POINTER, memory layout
+ * should be the same as for relevant field in the
+ * rte_flow_item_xxx structure.
+ */
+ void *pvalue;
};
};
--
2.18.1
^ permalink raw reply [flat|nested] 3+ messages in thread
* [dpdk-dev] [RFC 3/3] app/testpmd: fix hex string parser in flow commands
2021-09-10 14:16 [dpdk-dev] [RFC 1/3] ethdev: update modify field flow action Viacheslav Ovsiienko
@ 2021-09-10 14:16 ` Viacheslav Ovsiienko
0 siblings, 0 replies; 3+ messages in thread
From: Viacheslav Ovsiienko @ 2021-09-10 14:16 UTC (permalink / raw)
To: dev; +Cc: orika, stable
The hexadecimal string parser does not check the target
field buffer size, buffer overflow happens and might
cause the application failure (segmentation fault
is observed usually).
Fixes: 169a9fed1f4c ("app/testpmd: fix hex string parser support for flow API")
Cc: stable@dpdk.org
Signed-off-by: Viacheslav Ovsiienko <viacheslavo@nvidia.com>
---
app/test-pmd/cmdline_flow.c | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/app/test-pmd/cmdline_flow.c b/app/test-pmd/cmdline_flow.c
index 529ead6b2a..9e7fe1ae9f 100644
--- a/app/test-pmd/cmdline_flow.c
+++ b/app/test-pmd/cmdline_flow.c
@@ -7291,10 +7291,13 @@ parse_hex(struct context *ctx, const struct token *token,
hexlen -= 2;
}
if (hexlen > length)
- return -1;
+ goto error;
ret = parse_hex_string(str, hex_tmp, &hexlen);
if (ret < 0)
goto error;
+ /* Check the converted binary fits into data buffer. */
+ if (hexlen > size)
+ goto error;
/* Let parse_int() fill length information first. */
ret = snprintf(tmp, sizeof(tmp), "%u", hexlen);
if (ret < 0)
--
2.18.1
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2021-09-29 13:30 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-09-29 12:22 [dpdk-dev] [RFC 3/3] app/testpmd: fix hex string parser in flow commands Singh, Aman Deep
2021-09-29 13:30 ` Slava Ovsiienko
-- strict thread matches above, loose matches on Subject: below --
2021-09-10 14:16 [dpdk-dev] [RFC 1/3] ethdev: update modify field flow action Viacheslav Ovsiienko
2021-09-10 14:16 ` [dpdk-dev] [RFC 3/3] app/testpmd: fix hex string parser in flow commands Viacheslav Ovsiienko
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).