net/mlx5: fix hairpin split detection

Message ID 1574167114-112790-1-git-send-email-orika@mellanox.com (mailing list archive)
State Accepted, archived
Delegated to: Raslan Darawsheh
Headers
Series net/mlx5: fix hairpin split detection |

Checks

Context Check Description
ci/checkpatch success coding style OK
ci/iol-intel-Performance success Performance Testing PASS
ci/iol-compilation success Compile Testing PASS
ci/iol-mellanox-Performance success Performance Testing PASS
ci/travis-robot success Travis build: passed
ci/Intel-compilation fail apply issues

Commit Message

Ori Kam Nov. 19, 2019, 12:38 p.m. UTC
  When creating a flow, the flow is checked if it should be split into
2 flows based on the queue/rss acton.

If the RSS action with given without any queues, it will result in crash
due to the fact that the function checks the queue type.

This commit fixes this issue by checking if the rss action is not empty,
and at least one queue.

Fixes: d85c7b5ea59f ("net/mlx5: split hairpin flows")

Signed-off-by: Ori Kam <orika@mellanox.com>
Acked-by: Viacheslav Ovsiienko <viacheslavo@mellanox.com>
---
 drivers/net/mlx5/mlx5_flow.c | 4 ++++
 1 file changed, 4 insertions(+)
  

Comments

Raslan Darawsheh Nov. 19, 2019, 3:59 p.m. UTC | #1
Hi,


> -----Original Message-----
> From: dev <dev-bounces@dpdk.org> On Behalf Of Ori Kam
> Sent: Tuesday, November 19, 2019 2:39 PM
> To: Matan Azrad <matan@mellanox.com>; Shahaf Shuler
> <shahafs@mellanox.com>; Slava Ovsiienko <viacheslavo@mellanox.com>
> Cc: dev@dpdk.org; Ori Kam <orika@mellanox.com>
> Subject: [dpdk-dev] [PATCH] net/mlx5: fix hairpin split detection
> 
> When creating a flow, the flow is checked if it should be split into
> 2 flows based on the queue/rss acton.
> 
> If the RSS action with given without any queues, it will result in crash
> due to the fact that the function checks the queue type.
> 
> This commit fixes this issue by checking if the rss action is not empty,
> and at least one queue.
> 
> Fixes: d85c7b5ea59f ("net/mlx5: split hairpin flows")
> 
> Signed-off-by: Ori Kam <orika@mellanox.com>
> Acked-by: Viacheslav Ovsiienko <viacheslavo@mellanox.com>
> ---
>  drivers/net/mlx5/mlx5_flow.c | 4 ++++
>  1 file changed, 4 insertions(+)
> 
> diff --git a/drivers/net/mlx5/mlx5_flow.c b/drivers/net/mlx5/mlx5_flow.c
> index d677de8..b488b67 100644
> --- a/drivers/net/mlx5/mlx5_flow.c
> +++ b/drivers/net/mlx5/mlx5_flow.c
> @@ -2814,6 +2814,8 @@ uint32_t mlx5_flow_adjust_priority(struct
> rte_eth_dev *dev, int32_t priority,
>  		switch (actions->type) {
>  		case RTE_FLOW_ACTION_TYPE_QUEUE:
>  			queue = actions->conf;
> +			if (queue == NULL)
> +				return 0;
>  			if (mlx5_rxq_get_type(dev, queue->index) !=
>  			    MLX5_RXQ_TYPE_HAIRPIN)
>  				return 0;
> @@ -2822,6 +2824,8 @@ uint32_t mlx5_flow_adjust_priority(struct
> rte_eth_dev *dev, int32_t priority,
>  			break;
>  		case RTE_FLOW_ACTION_TYPE_RSS:
>  			rss = actions->conf;
> +			if (rss == NULL || rss->queue_num == 0)
> +				return 0;
>  			if (mlx5_rxq_get_type(dev, rss->queue[0]) !=
>  			    MLX5_RXQ_TYPE_HAIRPIN)
>  				return 0;
> --
> 1.8.3.1

Patch 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 d677de8..b488b67 100644
--- a/drivers/net/mlx5/mlx5_flow.c
+++ b/drivers/net/mlx5/mlx5_flow.c
@@ -2814,6 +2814,8 @@  uint32_t mlx5_flow_adjust_priority(struct rte_eth_dev *dev, int32_t priority,
 		switch (actions->type) {
 		case RTE_FLOW_ACTION_TYPE_QUEUE:
 			queue = actions->conf;
+			if (queue == NULL)
+				return 0;
 			if (mlx5_rxq_get_type(dev, queue->index) !=
 			    MLX5_RXQ_TYPE_HAIRPIN)
 				return 0;
@@ -2822,6 +2824,8 @@  uint32_t mlx5_flow_adjust_priority(struct rte_eth_dev *dev, int32_t priority,
 			break;
 		case RTE_FLOW_ACTION_TYPE_RSS:
 			rss = actions->conf;
+			if (rss == NULL || rss->queue_num == 0)
+				return 0;
 			if (mlx5_rxq_get_type(dev, rss->queue[0]) !=
 			    MLX5_RXQ_TYPE_HAIRPIN)
 				return 0;