Hi, Ying For the action check reorganization, please according to Beilei's comments, use array to stand the action element list. And as we discussed before, it's better to change in the next release.
Qiming -----Original Message----- From: Wang, Ying A Sent: Thursday, July 18, 2019 9:39 AM To: Zhang, Qi Z <[email protected]> Cc: Yang, Qiming <[email protected]>; [email protected]; Wang, Ying A <[email protected]>; [email protected] Subject: [PATCH 2/3] net/ice: fix flow action validation Action is a list. We should check each element of the action rather than the first one. This patch fixes this issue. Fixes: d76116a4678f ("net/ice: add generic flow API") Cc: [email protected] Signed-off-by: Wang Ying A <[email protected]> --- drivers/net/ice/ice_generic_flow.c | 39 ++++++++++++++++++++------------------ 1 file changed, 21 insertions(+), 18 deletions(-) diff --git a/drivers/net/ice/ice_generic_flow.c b/drivers/net/ice/ice_generic_flow.c index 464f6ec..2c57276 100644 --- a/drivers/net/ice/ice_generic_flow.c +++ b/drivers/net/ice/ice_generic_flow.c @@ -517,28 +517,31 @@ static int ice_flow_valid_action(struct rte_eth_dev *dev, { const struct rte_flow_action_queue *act_q; uint16_t queue; - - switch (actions->type) { - case RTE_FLOW_ACTION_TYPE_QUEUE: - act_q = actions->conf; - queue = act_q->index; - if (queue >= dev->data->nb_rx_queues) { + const struct rte_flow_action *action; + for (action = actions; action->type != + RTE_FLOW_ACTION_TYPE_END; action++) { + switch (action->type) { + case RTE_FLOW_ACTION_TYPE_QUEUE: + act_q = action->conf; + queue = act_q->index; + if (queue >= dev->data->nb_rx_queues) { + rte_flow_error_set(error, EINVAL, + RTE_FLOW_ERROR_TYPE_ACTION, + actions, "Invalid queue ID for" + " switch filter."); + return -rte_errno; + } + break; + case RTE_FLOW_ACTION_TYPE_DROP: + case RTE_FLOW_ACTION_TYPE_VOID: + break; + default: rte_flow_error_set(error, EINVAL, - RTE_FLOW_ERROR_TYPE_ACTION, - actions, "Invalid queue ID for" - " switch filter."); + RTE_FLOW_ERROR_TYPE_ACTION, actions, + "Invalid action."); return -rte_errno; } - break; - case RTE_FLOW_ACTION_TYPE_DROP: - break; - default: - rte_flow_error_set(error, EINVAL, - RTE_FLOW_ERROR_TYPE_ACTION, actions, - "Invalid action."); - return -rte_errno; } - return 0; } -- 1.8.3.1

