Thomas Bogendoerfer 9e3551
From: Jesse Brandeburg <jesse.brandeburg@intel.com>
Thomas Bogendoerfer 9e3551
Date: Fri, 8 Nov 2019 06:23:21 -0800
Thomas Bogendoerfer 9e3551
Subject: ice: fix stack leakage
Thomas Bogendoerfer 9e3551
Patch-mainline: v5.5-rc1
Thomas Bogendoerfer 9e3551
Git-commit: 949375de945f7042df2b6488228a1a2b36e69f35
Thomas Bogendoerfer 9e3551
References: bsc#1118661 FATE#325277
Thomas Bogendoerfer 9e3551
Thomas Bogendoerfer 9e3551
In the case of an invalid virtchannel request the driver
Thomas Bogendoerfer 9e3551
would return uninitialized data to the VF from the PF stack
Thomas Bogendoerfer 9e3551
which is a bug.  Fix by initializing the stack variable
Thomas Bogendoerfer 9e3551
earlier in the function before any return paths can be taken.
Thomas Bogendoerfer 9e3551
Thomas Bogendoerfer 9e3551
Fixes: 1071a8358a28 ("ice: Implement virtchnl commands for AVF support")
Thomas Bogendoerfer 9e3551
Signed-off-by: Jesse Brandeburg <jesse.brandeburg@intel.com>
Thomas Bogendoerfer 9e3551
Tested-by: Andrew Bowers <andrewx.bowers@intel.com>
Thomas Bogendoerfer 9e3551
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
Thomas Bogendoerfer 9e3551
Acked-by: Thomas Bogendoerfer <tbogendoerfer@suse.de>
Thomas Bogendoerfer 9e3551
---
Thomas Bogendoerfer 9e3551
 drivers/net/ethernet/intel/ice/ice_virtchnl_pf.c |    3 +--
Thomas Bogendoerfer 9e3551
 1 file changed, 1 insertion(+), 2 deletions(-)
Thomas Bogendoerfer 9e3551
Thomas Bogendoerfer 9e3551
--- a/drivers/net/ethernet/intel/ice/ice_virtchnl_pf.c
Thomas Bogendoerfer 9e3551
+++ b/drivers/net/ethernet/intel/ice/ice_virtchnl_pf.c
Thomas Bogendoerfer 9e3551
@@ -1651,8 +1651,8 @@ static int ice_vc_get_stats_msg(struct i
Thomas Bogendoerfer 9e3551
 	enum virtchnl_status_code v_ret = VIRTCHNL_STATUS_SUCCESS;
Thomas Bogendoerfer 9e3551
 	struct virtchnl_queue_select *vqs =
Thomas Bogendoerfer 9e3551
 		(struct virtchnl_queue_select *)msg;
Thomas Bogendoerfer 9e3551
+	struct ice_eth_stats stats = { 0 };
Thomas Bogendoerfer 9e3551
 	struct ice_pf *pf = vf->pf;
Thomas Bogendoerfer 9e3551
-	struct ice_eth_stats stats;
Thomas Bogendoerfer 9e3551
 	struct ice_vsi *vsi;
Thomas Bogendoerfer 9e3551
 
Thomas Bogendoerfer 9e3551
 	if (!test_bit(ICE_VF_STATE_ACTIVE, vf->vf_states)) {
Thomas Bogendoerfer 9e3551
@@ -1671,7 +1671,6 @@ static int ice_vc_get_stats_msg(struct i
Thomas Bogendoerfer 9e3551
 		goto error_param;
Thomas Bogendoerfer 9e3551
 	}
Thomas Bogendoerfer 9e3551
 
Thomas Bogendoerfer 9e3551
-	memset(&stats, 0, sizeof(struct ice_eth_stats));
Thomas Bogendoerfer 9e3551
 	ice_update_eth_stats(vsi);
Thomas Bogendoerfer 9e3551
 
Thomas Bogendoerfer 9e3551
 	stats = vsi->eth_stats;