net/bonding: fix stack overflow in selection logic

Message ID 20190730113135.19907-1-kkanas@marvell.com (mailing list archive)
State Superseded, archived
Delegated to: Ferruh Yigit
Headers
Series net/bonding: fix stack overflow in selection logic |

Checks

Context Check Description
ci/iol-Compile-Testing success Compile Testing PASS
ci/Intel-compilation success Compilation OK
ci/mellanox-Performance-Testing success Performance Testing PASS
ci/checkpatch success coding style OK

Commit Message

Krzysztof Kanas July 30, 2019, 11:31 a.m. UTC
  From: Krzysztof Kanas <kkanas@marvell.com>

Bonding selection logic uses agg_bandwidth, agg_count indexed by port_id
but those arrays are 8 entries long.

Fixes: 6d72657ce379 ("net/bonding: add other aggregator modes")
Cc: danielx.t.mrzyglod@intel.com

Signed-off-by: Krzysztof Kanas <kkanas@marvell.com>
---
 drivers/net/bonding/rte_eth_bond_8023ad.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
  

Comments

David Marchand July 30, 2019, 11:34 a.m. UTC | #1
On Tue, Jul 30, 2019 at 1:32 PM <kkanas@marvell.com> wrote:
>
> From: Krzysztof Kanas <kkanas@marvell.com>
>
> Bonding selection logic uses agg_bandwidth, agg_count indexed by port_id
> but those arrays are 8 entries long.
>
> Fixes: 6d72657ce379 ("net/bonding: add other aggregator modes")
> Cc: danielx.t.mrzyglod@intel.com
>
> Signed-off-by: Krzysztof Kanas <kkanas@marvell.com>
> ---
>  drivers/net/bonding/rte_eth_bond_8023ad.c | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/net/bonding/rte_eth_bond_8023ad.c b/drivers/net/bonding/rte_eth_bond_8023ad.c
> index 1e6a3fc7c641..a7c040e26931 100644
> --- a/drivers/net/bonding/rte_eth_bond_8023ad.c
> +++ b/drivers/net/bonding/rte_eth_bond_8023ad.c
> @@ -669,8 +669,8 @@ selection_logic(struct bond_dev_private *internals, uint16_t slave_id)
>         struct port *agg, *port;
>         uint16_t slaves_count, new_agg_id, i, j = 0;
>         uint16_t *slaves;
> -       uint64_t agg_bandwidth[8] = {0};
> -       uint64_t agg_count[8] = {0};
> +       uint64_t agg_bandwidth[RTE_MAX_ETHPORTS] = {0};
> +       uint64_t agg_count[RTE_MAX_ETHPORTS] = {0};
>         uint16_t default_slave = 0;
>         uint8_t mode_count_id, mode_band_id;
>         struct rte_eth_link link_info;
> --
> 2.21.0
>

I already sent the same patch.
Please see the comments if you want to take over this:
https://patchwork.dpdk.org/patch/51492/
  

Patch

diff --git a/drivers/net/bonding/rte_eth_bond_8023ad.c b/drivers/net/bonding/rte_eth_bond_8023ad.c
index 1e6a3fc7c641..a7c040e26931 100644
--- a/drivers/net/bonding/rte_eth_bond_8023ad.c
+++ b/drivers/net/bonding/rte_eth_bond_8023ad.c
@@ -669,8 +669,8 @@  selection_logic(struct bond_dev_private *internals, uint16_t slave_id)
 	struct port *agg, *port;
 	uint16_t slaves_count, new_agg_id, i, j = 0;
 	uint16_t *slaves;
-	uint64_t agg_bandwidth[8] = {0};
-	uint64_t agg_count[8] = {0};
+	uint64_t agg_bandwidth[RTE_MAX_ETHPORTS] = {0};
+	uint64_t agg_count[RTE_MAX_ETHPORTS] = {0};
 	uint16_t default_slave = 0;
 	uint8_t mode_count_id, mode_band_id;
 	struct rte_eth_link link_info;