[PATCH v1 2/2] net/mlx5: fix modify flex item error
Rongwei Liu
rongweil at nvidia.com
Wed Feb 21 08:10:43 CET 2024
In the rte_flow_field_data structure, the flex item handle is part
of union with other members like level/tag_index.
If the user wants to modify the flex item as source or destination,
there should not be any checking against zero.
Signed-off-by: Rongwei Liu <rongweil at nvidia.com>
Fixes: 7ea38955b ("ethdev: update MPLS header modification API")
Cc: michaelba at nvidia.com
Cc: stable at dpdk.org
Acked-by: Dariusz Sosnowski <dsosnowski at nvidia.com>
---
drivers/net/mlx5/mlx5_flow.c | 2 +-
drivers/net/mlx5/mlx5_flow_hw.c | 6 ++++--
2 files changed, 5 insertions(+), 3 deletions(-)
diff --git a/drivers/net/mlx5/mlx5_flow.c b/drivers/net/mlx5/mlx5_flow.c
index 3c306a5f70..9caecc3db6 100644
--- a/drivers/net/mlx5/mlx5_flow.c
+++ b/drivers/net/mlx5/mlx5_flow.c
@@ -2369,7 +2369,7 @@ int
flow_validate_modify_field_level(const struct rte_flow_field_data *data,
struct rte_flow_error *error)
{
- if (data->level == 0)
+ if (data->level == 0 || data->field == RTE_FLOW_FIELD_FLEX_ITEM)
return 0;
if (data->field != RTE_FLOW_FIELD_TAG &&
data->field != (enum rte_flow_field_id)MLX5_RTE_FLOW_FIELD_META_REG) {
diff --git a/drivers/net/mlx5/mlx5_flow_hw.c b/drivers/net/mlx5/mlx5_flow_hw.c
index efbf88f56d..6dde19c1b9 100644
--- a/drivers/net/mlx5/mlx5_flow_hw.c
+++ b/drivers/net/mlx5/mlx5_flow_hw.c
@@ -6104,7 +6104,8 @@ flow_hw_validate_action_modify_field(struct rte_eth_dev *dev,
ret = flow_hw_validate_modify_field_level(&action_conf->dst, false, error);
if (ret)
return ret;
- if (!flow_hw_modify_field_is_geneve_opt(action_conf->dst.field)) {
+ if (action_conf->dst.field != RTE_FLOW_FIELD_FLEX_ITEM &&
+ !flow_hw_modify_field_is_geneve_opt(action_conf->dst.field)) {
if (action_conf->dst.tag_index &&
!flow_modify_field_support_tag_array(action_conf->dst.field))
return rte_flow_error_set(error, EINVAL,
@@ -6129,7 +6130,8 @@ flow_hw_validate_action_modify_field(struct rte_eth_dev *dev,
"destination field mask and template are not equal");
if (action_conf->src.field != RTE_FLOW_FIELD_POINTER &&
action_conf->src.field != RTE_FLOW_FIELD_VALUE) {
- if (!flow_hw_modify_field_is_geneve_opt(action_conf->src.field)) {
+ if (action_conf->src.field != RTE_FLOW_FIELD_FLEX_ITEM &&
+ !flow_hw_modify_field_is_geneve_opt(action_conf->src.field)) {
if (action_conf->src.tag_index &&
!flow_modify_field_support_tag_array(action_conf->src.field))
return rte_flow_error_set(error, EINVAL,
--
2.27.0
More information about the stable
mailing list