patches for DPDK stable branches
 help / color / mirror / Atom feed
* [dpdk-stable] [DPDK 01/46] net/ice/base: fix uninitialized stack variables
@ 2020-03-10 10:12 wei zhao
  2020-03-10 10:12 ` [dpdk-stable] [DPDK 03/46] net/ice/base: fix removing MAC rule wei zhao
                   ` (3 more replies)
  0 siblings, 4 replies; 6+ messages in thread
From: wei zhao @ 2020-03-10 10:12 UTC (permalink / raw)
  To: qabuild; +Cc: Qi Zhang, stable, Jesse Brandeburg, Paul M Stillwell Jr

From: Qi Zhang <qi.z.zhang@intel.com>

Via code inspection, I found that some partially initialized
stack variables were being passed along to called functions,
which could eventually result in those uninitialized members
being used.  To fix this, make sure the local variables are
zeroed out before partially initializing them.  This should
prevent any unintended consequences from using stack memory that
might have junk in it.

In addition to the memsets, this patch also initializes one
member in one function, that needed to be initialized to non-zero.

Fixes: fed0c5ca5f19 ("net/ice/base: support programming a new switch recipe")
Cc: stable@dpdk.org

Signed-off-by: Jesse Brandeburg <jesse.brandeburg@intel.com>
Signed-off-by: Paul M Stillwell Jr <paul.m.stillwell.jr@intel.com>
Signed-off-by: Qi Zhang <qi.z.zhang@intel.com>
---
 drivers/net/ice/base/ice_switch.c | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/drivers/net/ice/base/ice_switch.c b/drivers/net/ice/base/ice_switch.c
index 085f344..e88d0f7 100644
--- a/drivers/net/ice/base/ice_switch.c
+++ b/drivers/net/ice/base/ice_switch.c
@@ -6227,9 +6227,12 @@ ice_adv_add_update_vsi_list(struct ice_hw *hw,
 		if (status)
 			return status;
 
+		ice_memset(&tmp_fltr, 0, sizeof(tmp_fltr), ICE_NONDMA_MEM);
 		tmp_fltr.fltr_rule_id = cur_fltr->fltr_rule_id;
 		tmp_fltr.fltr_act = ICE_FWD_TO_VSI_LIST;
 		tmp_fltr.fwd_id.vsi_list_id = vsi_list_id;
+		tmp_fltr.lkup_type = ICE_SW_LKUP_LAST;
+
 		/* Update the previous switch rule of "forward to VSI" to
 		 * "fwd to VSI list"
 		 */
@@ -6473,6 +6476,7 @@ ice_add_adv_rule(struct ice_hw *hw, struct ice_adv_lkup_elem *lkups,
 	if (rinfo->sw_act.fltr_act == ICE_FWD_TO_VSI) {
 		struct ice_fltr_info tmp_fltr;
 
+		ice_memset(&tmp_fltr, 0, sizeof(tmp_fltr), ICE_NONDMA_MEM);
 		tmp_fltr.fltr_rule_id =
 			LE16_TO_CPU(s_rule->pdata.lkup_tx_rx.index);
 		tmp_fltr.fltr_act = ICE_FWD_TO_VSI;
@@ -6557,6 +6561,8 @@ ice_adv_rem_update_vsi_list(struct ice_hw *hw, u16 vsi_handle,
 						  lkup_type);
 		if (status)
 			return status;
+
+		ice_memset(&tmp_fltr, 0, sizeof(tmp_fltr), ICE_NONDMA_MEM);
 		tmp_fltr.fltr_rule_id = fm_list->rule_info.fltr_rule_id;
 		fm_list->rule_info.sw_act.fltr_act = ICE_FWD_TO_VSI;
 		tmp_fltr.fltr_act = ICE_FWD_TO_VSI;
-- 
2.7.5


^ permalink raw reply	[flat|nested] 6+ messages in thread

* [dpdk-stable] [DPDK 03/46] net/ice/base: fix removing MAC rule
  2020-03-10 10:12 [dpdk-stable] [DPDK 01/46] net/ice/base: fix uninitialized stack variables wei zhao
@ 2020-03-10 10:12 ` wei zhao
  2020-03-10 10:13 ` [dpdk-stable] [DPDK 44/46] net/ice: change default tunnle type wei zhao
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 6+ messages in thread
From: wei zhao @ 2020-03-10 10:12 UTC (permalink / raw)
  To: qabuild; +Cc: Qi Zhang, stable, Michal Swiatkowski, Paul M Stillwell Jr

From: Qi Zhang <qi.z.zhang@intel.com>

Send correct recp_list to ice_remove_mac_rule. ICE_SW_LKUP_ETHERTYPE
rule list was sent instead of ICE_SW_LKUP_MAC. That caused problem
with adding new mac rule on VF, because rule wasn't removed correctly.

Fixes: c7dd15931183 ("net/ice/base: add virtual switch code")
Cc: stable@dpdk.org

Signed-off-by: Michal Swiatkowski <michal.swiatkowski@intel.com>
Signed-off-by: Paul M Stillwell Jr <paul.m.stillwell.jr@intel.com>
Signed-off-by: Qi Zhang <qi.z.zhang@intel.com>
---
 drivers/net/ice/base/ice_switch.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/net/ice/base/ice_switch.c b/drivers/net/ice/base/ice_switch.c
index e88d0f7..57b5008 100644
--- a/drivers/net/ice/base/ice_switch.c
+++ b/drivers/net/ice/base/ice_switch.c
@@ -4398,7 +4398,7 @@ ice_remove_vsi_lkup_fltr(struct ice_hw *hw, u16 vsi_handle,
 
 	switch (lkup) {
 	case ICE_SW_LKUP_MAC:
-		ice_remove_mac_rule(hw, &remove_list_head, recp_list);
+		ice_remove_mac_rule(hw, &remove_list_head, &recp_list[lkup]);
 		break;
 	case ICE_SW_LKUP_VLAN:
 		ice_remove_vlan(hw, &remove_list_head);
-- 
2.7.5


^ permalink raw reply	[flat|nested] 6+ messages in thread

* [dpdk-stable] [DPDK 44/46] net/ice: change default tunnle type
  2020-03-10 10:12 [dpdk-stable] [DPDK 01/46] net/ice/base: fix uninitialized stack variables wei zhao
  2020-03-10 10:12 ` [dpdk-stable] [DPDK 03/46] net/ice/base: fix removing MAC rule wei zhao
@ 2020-03-10 10:13 ` wei zhao
  2020-03-10 10:13 ` [dpdk-stable] [DPDK 45/46] net/ice: add action number check for swicth wei zhao
  2020-03-10 10:13 ` [dpdk-stable] [DPDK 46/46] net/ice: fix input set of VLAN item wei zhao
  3 siblings, 0 replies; 6+ messages in thread
From: wei zhao @ 2020-03-10 10:13 UTC (permalink / raw)
  To: qabuild; +Cc: wei zhao, stable

The default tunnle type for swicth filter change to new
defination of ICE_SW_TUN_AND_NON_TUN in order that the rule
will be apply to more packet type.

Cc: stable@dpdk.org
Fixes: 47d460d63233 ("net/ice: rework switch filter")

Signed-off-by: wei zhao <wei.zhao1@intel.com>
---
 drivers/net/ice/ice_switch_filter.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/drivers/net/ice/ice_switch_filter.c b/drivers/net/ice/ice_switch_filter.c
index f3d0e10..e09cd0a 100644
--- a/drivers/net/ice/ice_switch_filter.c
+++ b/drivers/net/ice/ice_switch_filter.c
@@ -1097,7 +1097,8 @@ ice_switch_parse_pattern_action(struct ice_adapter *ad,
 	uint16_t lkups_num = 0;
 	const struct rte_flow_item *item = pattern;
 	uint16_t item_num = 0;
-	enum ice_sw_tunnel_type tun_type = ICE_NON_TUN;
+	enum ice_sw_tunnel_type tun_type =
+		ICE_SW_TUN_AND_NON_TUN;
 	struct ice_pattern_match_item *pattern_match_item = NULL;
 
 	for (; item->type != RTE_FLOW_ITEM_TYPE_END; item++) {
-- 
2.7.5


^ permalink raw reply	[flat|nested] 6+ messages in thread

* [dpdk-stable] [DPDK 45/46] net/ice: add action number check for swicth
  2020-03-10 10:12 [dpdk-stable] [DPDK 01/46] net/ice/base: fix uninitialized stack variables wei zhao
  2020-03-10 10:12 ` [dpdk-stable] [DPDK 03/46] net/ice/base: fix removing MAC rule wei zhao
  2020-03-10 10:13 ` [dpdk-stable] [DPDK 44/46] net/ice: change default tunnle type wei zhao
@ 2020-03-10 10:13 ` wei zhao
  2020-03-10 10:13 ` [dpdk-stable] [DPDK 46/46] net/ice: fix input set of VLAN item wei zhao
  3 siblings, 0 replies; 6+ messages in thread
From: wei zhao @ 2020-03-10 10:13 UTC (permalink / raw)
  To: qabuild; +Cc: wei zhao, stable

The action number can only be one for DCF or PF
switch filter, not support large action.

Cc: stable@dpdk.org
Fixes: 47d460d63233 ("net/ice: rework switch filter")

Signed-off-by: wei zhao <wei.zhao1@intel.com>
---
 drivers/net/ice/ice_switch_filter.c | 48 +++++++++++++++++++++++++++++++++++++
 1 file changed, 48 insertions(+)

diff --git a/drivers/net/ice/ice_switch_filter.c b/drivers/net/ice/ice_switch_filter.c
index e09cd0a..8e4f40a 100644
--- a/drivers/net/ice/ice_switch_filter.c
+++ b/drivers/net/ice/ice_switch_filter.c
@@ -1080,6 +1080,46 @@ ice_switch_parse_action(struct ice_pf *pf,
 }
 
 static int
+ice_switch_check_action(const struct rte_flow_action *actions,
+			    struct rte_flow_error *error)
+{
+	const struct rte_flow_action *action;
+	enum rte_flow_action_type action_type;
+	uint16_t actions_num = 0;
+
+	for (action = actions; action->type !=
+				RTE_FLOW_ACTION_TYPE_END; action++) {
+		action_type = action->type;
+		switch (action_type) {
+		case RTE_FLOW_ACTION_TYPE_VF:
+		case RTE_FLOW_ACTION_TYPE_RSS:
+		case RTE_FLOW_ACTION_TYPE_QUEUE:
+		case RTE_FLOW_ACTION_TYPE_DROP:
+			actions_num++;
+			break;
+		case RTE_FLOW_ACTION_TYPE_VOID:
+			continue;
+		default:
+			rte_flow_error_set(error,
+					   EINVAL, RTE_FLOW_ERROR_TYPE_ACTION,
+					   actions,
+					   "Invalid action type");
+			return -rte_errno;
+		}
+	}
+
+	if (actions_num > 1) {
+		rte_flow_error_set(error,
+				   EINVAL, RTE_FLOW_ERROR_TYPE_ACTION,
+				   actions,
+				   "Invalid action number");
+		return -rte_errno;
+	}
+
+	return 0;
+}
+
+static int
 ice_switch_parse_pattern_action(struct ice_adapter *ad,
 		struct ice_pattern_match_item *array,
 		uint32_t array_len,
@@ -1164,6 +1204,14 @@ ice_switch_parse_pattern_action(struct ice_adapter *ad,
 		goto error;
 	}
 
+	ret = ice_switch_check_action(actions, error);
+	if (ret) {
+		rte_flow_error_set(error, EINVAL,
+				   RTE_FLOW_ERROR_TYPE_HANDLE, NULL,
+				   "Invalid input action number");
+		goto error;
+	}
+
 	if (ad->hw.dcf_enabled)
 		ret = ice_switch_parse_dcf_action(actions, error, &rule_info);
 	else
-- 
2.7.5


^ permalink raw reply	[flat|nested] 6+ messages in thread

* [dpdk-stable] [DPDK 46/46] net/ice: fix input set of VLAN item
  2020-03-10 10:12 [dpdk-stable] [DPDK 01/46] net/ice/base: fix uninitialized stack variables wei zhao
                   ` (2 preceding siblings ...)
  2020-03-10 10:13 ` [dpdk-stable] [DPDK 45/46] net/ice: add action number check for swicth wei zhao
@ 2020-03-10 10:13 ` wei zhao
  3 siblings, 0 replies; 6+ messages in thread
From: wei zhao @ 2020-03-10 10:13 UTC (permalink / raw)
  To: qabuild; +Cc: wei zhao, stable

The input set for inner type of vlan item should
be ICE_INSET_ETHERTYPE, not ICE_INSET_VLAN_OUTER.
This mac vlan filter is also part of DCF switch filter.

Cc: stable@dpdk.org
Fixes: 47d460d63233 ("net/ice: rework switch filter")

Signed-off-by: wei zhao <wei.zhao1@intel.com>
---
 drivers/net/ice/ice_switch_filter.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/net/ice/ice_switch_filter.c b/drivers/net/ice/ice_switch_filter.c
index 8e4f40a..b1862cd 100644
--- a/drivers/net/ice/ice_switch_filter.c
+++ b/drivers/net/ice/ice_switch_filter.c
@@ -867,7 +867,7 @@ ice_switch_inset_get(const struct rte_flow_item pattern[],
 						vlan_spec->inner_type;
 					list[t].m_u.vlan_hdr.type =
 						vlan_mask->inner_type;
-					input_set |= ICE_INSET_VLAN_OUTER;
+					input_set |= ICE_INSET_ETHERTYPE;
 				}
 				t++;
 			}
-- 
2.7.5


^ permalink raw reply	[flat|nested] 6+ messages in thread

* [dpdk-stable] [DPDK 01/46] net/ice/base: fix uninitialized stack variables
@ 2020-03-10 10:26 wei zhao
  0 siblings, 0 replies; 6+ messages in thread
From: wei zhao @ 2020-03-10 10:26 UTC (permalink / raw)
  To: qabuild; +Cc: wei zhao, stable, Jesse Brandeburg, Paul M Stillwell Jr, Qi Zhang

Via code inspection, I found that some partially initialized
stack variables were being passed along to called functions,
which could eventually result in those uninitialized members
being used.  To fix this, make sure the local variables are
zeroed out before partially initializing them.  This should
prevent any unintended consequences from using stack memory that
might have junk in it.

In addition to the memsets, this patch also initializes one
member in one function, that needed to be initialized to non-zero.

Fixes: fed0c5ca5f19 ("net/ice/base: support programming a new switch recipe")
Cc: stable@dpdk.org

Signed-off-by: Jesse Brandeburg <jesse.brandeburg@intel.com>
Signed-off-by: Paul M Stillwell Jr <paul.m.stillwell.jr@intel.com>
Signed-off-by: Qi Zhang <qi.z.zhang@intel.com>
---
 drivers/net/ice/base/ice_switch.c | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/drivers/net/ice/base/ice_switch.c b/drivers/net/ice/base/ice_switch.c
index 085f344..e88d0f7 100644
--- a/drivers/net/ice/base/ice_switch.c
+++ b/drivers/net/ice/base/ice_switch.c
@@ -6227,9 +6227,12 @@ ice_adv_add_update_vsi_list(struct ice_hw *hw,
 		if (status)
 			return status;
 
+		ice_memset(&tmp_fltr, 0, sizeof(tmp_fltr), ICE_NONDMA_MEM);
 		tmp_fltr.fltr_rule_id = cur_fltr->fltr_rule_id;
 		tmp_fltr.fltr_act = ICE_FWD_TO_VSI_LIST;
 		tmp_fltr.fwd_id.vsi_list_id = vsi_list_id;
+		tmp_fltr.lkup_type = ICE_SW_LKUP_LAST;
+
 		/* Update the previous switch rule of "forward to VSI" to
 		 * "fwd to VSI list"
 		 */
@@ -6473,6 +6476,7 @@ ice_add_adv_rule(struct ice_hw *hw, struct ice_adv_lkup_elem *lkups,
 	if (rinfo->sw_act.fltr_act == ICE_FWD_TO_VSI) {
 		struct ice_fltr_info tmp_fltr;
 
+		ice_memset(&tmp_fltr, 0, sizeof(tmp_fltr), ICE_NONDMA_MEM);
 		tmp_fltr.fltr_rule_id =
 			LE16_TO_CPU(s_rule->pdata.lkup_tx_rx.index);
 		tmp_fltr.fltr_act = ICE_FWD_TO_VSI;
@@ -6557,6 +6561,8 @@ ice_adv_rem_update_vsi_list(struct ice_hw *hw, u16 vsi_handle,
 						  lkup_type);
 		if (status)
 			return status;
+
+		ice_memset(&tmp_fltr, 0, sizeof(tmp_fltr), ICE_NONDMA_MEM);
 		tmp_fltr.fltr_rule_id = fm_list->rule_info.fltr_rule_id;
 		fm_list->rule_info.sw_act.fltr_act = ICE_FWD_TO_VSI;
 		tmp_fltr.fltr_act = ICE_FWD_TO_VSI;
-- 
2.7.5


^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2020-03-10 10:47 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-03-10 10:12 [dpdk-stable] [DPDK 01/46] net/ice/base: fix uninitialized stack variables wei zhao
2020-03-10 10:12 ` [dpdk-stable] [DPDK 03/46] net/ice/base: fix removing MAC rule wei zhao
2020-03-10 10:13 ` [dpdk-stable] [DPDK 44/46] net/ice: change default tunnle type wei zhao
2020-03-10 10:13 ` [dpdk-stable] [DPDK 45/46] net/ice: add action number check for swicth wei zhao
2020-03-10 10:13 ` [dpdk-stable] [DPDK 46/46] net/ice: fix input set of VLAN item wei zhao
2020-03-10 10:26 [dpdk-stable] [DPDK 01/46] net/ice/base: fix uninitialized stack variables wei zhao

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).