| From foo@baz Sun Aug 26 09:13:00 CEST 2018 |
| From: Sudarsana Reddy Kalluru <sudarsana.kalluru@cavium.com> |
| Date: Tue, 24 Jul 2018 02:43:52 -0700 |
| Subject: bnx2x: Fix invalid memory access in rss hash config path. |
| |
| From: Sudarsana Reddy Kalluru <sudarsana.kalluru@cavium.com> |
| |
| [ Upstream commit ae2dcb28c24794a87e424a726a1cf1a61980f52d ] |
| |
| Rx hash/filter table configuration uses rss_conf_obj to configure filters |
| in the hardware. This object is initialized only when the interface is |
| brought up. |
| This patch adds driver changes to configure rss params only when the device |
| is in opened state. In port disabled case, the config will be cached in the |
| driver structure which will be applied in the successive load path. |
| |
| Please consider applying it to 'net' branch. |
| |
| Signed-off-by: Sudarsana Reddy Kalluru <Sudarsana.Kalluru@cavium.com> |
| Signed-off-by: David S. Miller <davem@davemloft.net> |
| Signed-off-by: Sasha Levin <alexander.levin@microsoft.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| drivers/net/ethernet/broadcom/bnx2x/bnx2x_ethtool.c | 13 ++++++++++--- |
| 1 file changed, 10 insertions(+), 3 deletions(-) |
| |
| --- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_ethtool.c |
| +++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_ethtool.c |
| @@ -3387,14 +3387,18 @@ static int bnx2x_set_rss_flags(struct bn |
| DP(BNX2X_MSG_ETHTOOL, |
| "rss re-configured, UDP 4-tupple %s\n", |
| udp_rss_requested ? "enabled" : "disabled"); |
| - return bnx2x_rss(bp, &bp->rss_conf_obj, false, true); |
| + if (bp->state == BNX2X_STATE_OPEN) |
| + return bnx2x_rss(bp, &bp->rss_conf_obj, false, |
| + true); |
| } else if ((info->flow_type == UDP_V6_FLOW) && |
| (bp->rss_conf_obj.udp_rss_v6 != udp_rss_requested)) { |
| bp->rss_conf_obj.udp_rss_v6 = udp_rss_requested; |
| DP(BNX2X_MSG_ETHTOOL, |
| "rss re-configured, UDP 4-tupple %s\n", |
| udp_rss_requested ? "enabled" : "disabled"); |
| - return bnx2x_rss(bp, &bp->rss_conf_obj, false, true); |
| + if (bp->state == BNX2X_STATE_OPEN) |
| + return bnx2x_rss(bp, &bp->rss_conf_obj, false, |
| + true); |
| } |
| return 0; |
| |
| @@ -3508,7 +3512,10 @@ static int bnx2x_set_rxfh(struct net_dev |
| bp->rss_conf_obj.ind_table[i] = indir[i] + bp->fp->cl_id; |
| } |
| |
| - return bnx2x_config_rss_eth(bp, false); |
| + if (bp->state == BNX2X_STATE_OPEN) |
| + return bnx2x_config_rss_eth(bp, false); |
| + |
| + return 0; |
| } |
| |
| /** |