Hi£º When the number of slave slave devices exceeds 8, it will cause the array subscript to cross the boundary. According to the suggestions, Modified array subscript to RTE_MAX_ETHPORTS, and Changed uint8_t to uint16_t. Something like this: From 51a081ea88cca1599d458d8d1c7d9605a6eb3352 Mon Sep 17 00:00:00 2001 From: zhaohui8 Date: Wed, 20 Mar 2019 20:17:27 +0800 Subject: [PATCH] net/bonding: fix Segfault when eal thread executing nic¡®s lsc event for mode 4 Change-Id: I6d800a3adf5ca51f295b607de879bcb0ccc20004 --- drivers/net/bonding/rte_eth_bond_8023ad.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/drivers/net/bonding/rte_eth_bond_8023ad.c b/drivers/net/bonding/rte_eth_bond_8023ad.c index dd847c6..4d99239 100644 --- a/drivers/net/bonding/rte_eth_bond_8023ad.c +++ b/drivers/net/bonding/rte_eth_bond_8023ad.c @@ -638,7 +638,7 @@ SM_FLAG_CLR(port, NTT); } -static uint8_t +static uint16_t max_index(uint64_t *a, int n) { if (n <= 0) @@ -664,15 +664,15 @@ * @param port_pos Port to assign. */ static void -selection_logic(struct bond_dev_private *internals, uint8_t slave_id) +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; + uint16_t mode_count_id, mode_band_id; struct rte_eth_link link_info; slaves = internals->active_slaves; @@ -806,7 +806,7 @@ struct ether_addr slave_addr; struct rte_mbuf *lacp_pkt = NULL; - uint8_t i, slave_id; + uint16_t i, slave_id; /* Update link status on each port */ -- 1.9.5.msysgit.0