[v2,1/3] net/mlx5: fix validation for conntrack indirect action

Message ID 20230718133214.3895192-1-akozyrev@nvidia.com (mailing list archive)
State Accepted, archived
Delegated to: Raslan Darawsheh
Headers
Series [v2,1/3] net/mlx5: fix validation for conntrack indirect action |

Checks

Context Check Description
ci/checkpatch success coding style OK

Commit Message

Alexander Kozyrev July 18, 2023, 1:32 p.m. UTC
  From: Bing Zhao <bingz@nvidia.com>

After rte_flow_shared_action_* API was replaced with
rte_flow_action_handle_* API, one input parameter of the update
interface was also changed. A generic pointer was used instead of the
"const struct rte_flow_action *" pointer.

In the entrance of mlx5 PMD callback for update, the validation is
called for all indirect actions. But for conntrack type, the pointer
is no longer with rte_flow_action pointer type and it will cause an
incorrect casting and error.

The content for updating should only be validated when needed. It
should skip the validation in the entrance. Right now, the content
was already added before updating the hardware by WQE. So the type
of the indirect action should be checked before calling the action
validate function.

When creating a new conntrack object, the validation is still needed
since all the content will be used to update the hardware context.

Fixes: 40327aab1491 ("ethdev: introduce indirect flow action")

Signed-off-by: Bing Zhao <bingz@nvidia.com>
---
 drivers/net/mlx5/mlx5_flow.c | 13 +++++++++++--
 1 file changed, 11 insertions(+), 2 deletions(-)
  

Comments

Ori Kam July 18, 2023, 2:29 p.m. UTC | #1
> -----Original Message-----
> From: Alexander Kozyrev <akozyrev@nvidia.com>
> Sent: Tuesday, July 18, 2023 4:32 PM
> 
> From: Bing Zhao <bingz@nvidia.com>
> 
> After rte_flow_shared_action_* API was replaced with
> rte_flow_action_handle_* API, one input parameter of the update
> interface was also changed. A generic pointer was used instead of the
> "const struct rte_flow_action *" pointer.
> 
> In the entrance of mlx5 PMD callback for update, the validation is
> called for all indirect actions. But for conntrack type, the pointer
> is no longer with rte_flow_action pointer type and it will cause an
> incorrect casting and error.
> 
> The content for updating should only be validated when needed. It
> should skip the validation in the entrance. Right now, the content
> was already added before updating the hardware by WQE. So the type
> of the indirect action should be checked before calling the action
> validate function.
> 
> When creating a new conntrack object, the validation is still needed
> since all the content will be used to update the hardware context.
> 
> Fixes: 40327aab1491 ("ethdev: introduce indirect flow action")
> 
> Signed-off-by: Bing Zhao <bingz@nvidia.com>
> ---

Acked-by: Ori Kam <orika@nvidia.com>
Best,
Ori
  
Raslan Darawsheh July 18, 2023, 3:51 p.m. UTC | #2
Hi,

> -----Original Message-----
> From: Alexander Kozyrev <akozyrev@nvidia.com>
> Sent: Tuesday, July 18, 2023 4:32 PM
> To: dev@dpdk.org
> Cc: stable@dpdk.org; Raslan Darawsheh <rasland@nvidia.com>; Slava
> Ovsiienko <viacheslavo@nvidia.com>; Matan Azrad <matan@nvidia.com>;
> stephen@networkplumber.org; Bing Zhao <bingz@nvidia.com>
> Subject: [PATCH v2 1/3] net/mlx5: fix validation for conntrack indirect action
> 
> From: Bing Zhao <bingz@nvidia.com>
> 
> After rte_flow_shared_action_* API was replaced with
> rte_flow_action_handle_* API, one input parameter of the update interface
> was also changed. A generic pointer was used instead of the "const struct
> rte_flow_action *" pointer.
> 
> In the entrance of mlx5 PMD callback for update, the validation is called for all
> indirect actions. But for conntrack type, the pointer is no longer with
> rte_flow_action pointer type and it will cause an incorrect casting and error.
> 
> The content for updating should only be validated when needed. It should skip
> the validation in the entrance. Right now, the content was already added
> before updating the hardware by WQE. So the type of the indirect action
> should be checked before calling the action validate function.
> 
> When creating a new conntrack object, the validation is still needed since all
> the content will be used to update the hardware context.
> 
> Fixes: 40327aab1491 ("ethdev: introduce indirect flow action")
> 
> Signed-off-by: Bing Zhao <bingz@nvidia.com>

Series applied to next-net-mlx,

Kindest regards,
Raslan Darawsheh
  

Patch

diff --git a/drivers/net/mlx5/mlx5_flow.c b/drivers/net/mlx5/mlx5_flow.c
index 4b567f61dd..9bd92f28fd 100644
--- a/drivers/net/mlx5/mlx5_flow.c
+++ b/drivers/net/mlx5/mlx5_flow.c
@@ -10753,9 +10753,18 @@  mlx5_action_handle_update(struct rte_eth_dev *dev,
 	const struct mlx5_flow_driver_ops *fops =
 			flow_get_drv_ops(flow_get_drv_type(dev, &attr));
 	int ret;
+	uint32_t act_idx = (uint32_t)(uintptr_t)handle;
+	uint32_t type = act_idx >> MLX5_INDIRECT_ACTION_TYPE_OFFSET;
 
-	ret = flow_drv_action_validate(dev, NULL,
-			(const struct rte_flow_action *)update, fops, error);
+	switch (type) {
+	case MLX5_INDIRECT_ACTION_TYPE_CT:
+		ret = 0;
+		break;
+	default:
+		ret = flow_drv_action_validate(dev, NULL,
+				(const struct rte_flow_action *)update,
+				fops, error);
+	}
 	if (ret)
 		return ret;
 	return flow_drv_action_update(dev, handle, update, fops,