On Thu, 13 Nov 2025 22:17:25 +0200
Maayan Kashani <[email protected]> wrote:

> The flex_link_item_parse function was using FLEX_MAX_FLOW_PATTERN_LENGTH
> for all memcpy operations regardless of the actual flow item type. This
> could lead to copying incorrect amounts of data.
> 
> This patch adds a switch statement to determine the correct size based
> on the actual flow item type (IPv4, IPv6, UDP, TCP) and uses that size
> for the memcpy operations on spec, mask, and last fields.
> 
> Also adds validation to reject unsupported item types.
> 
> Fixes: 59f3a8acbcdb ("app/testpmd: add flex item commands")
> Cc: [email protected]
> 
> Signed-off-by: Maayan Kashani <[email protected]>
> ---
>  app/test-pmd/cmd_flex_item.c | 10 +++++++---
>  1 file changed, 7 insertions(+), 3 deletions(-)
> 
> diff --git a/app/test-pmd/cmd_flex_item.c b/app/test-pmd/cmd_flex_item.c
> index e6e1cefeb3d..ec19ab63e75 100644
> --- a/app/test-pmd/cmd_flex_item.c
> +++ b/app/test-pmd/cmd_flex_item.c
> @@ -134,6 +134,7 @@ flex_link_item_parse(const char *src, struct 
> rte_flow_item *item)
>       struct rte_flow_attr *attr;
>       struct rte_flow_item *pattern;
>       struct rte_flow_action *actions;
> +     size_t sz = 0;
>  
>       sprintf(flow_rule,
>               "flow create 0 pattern %s / end actions drop / end", src);
> @@ -143,21 +144,24 @@ flex_link_item_parse(const char *src, struct 
> rte_flow_item *item)
>       if (ret)
>               return ret;
>       item->type = pattern->type;
> +     ret = rte_flow_conv(RTE_FLOW_CONV_OP_ITEM_MASK, NULL, 0, item, NULL);
> +     if (ret > 0)
> +             sz = ret;

You don't really need a temporary variable sz, can't you just use the
return value directly or are you concerned about signed/unsigned mismatch.
If concerned about signed/unsigned mismatch warnings then would need
cast on the assignment to sz.

Reply via email to