[DPDK] app/testpmd: fix heap-free-before-use when quit
wenxuanx.wu at intel.com
wenxuanx.wu at intel.com
Wed Mar 2 08:16:17 CET 2022
From: wenxuan wu <wenxuanx.wu at intel.com>
Change func logic is_bonding_slave and set_port_slave_flag to avoid this
error.Port->slave_flag with dev_flag check to ensure slave_flag is securely
set.
Remove eth_dev_info_get in func is_bonding_slave, which would lead to
a heap-free-before-use error the reason is that vf was still accessing a
freed pf resource.
Fixes: 0a0821bcf312 ("app/testpmd: remove most uses of internal ethdev array")
Cc: stable at dpdk.org
Signed-off-by: Wenxuan Wu <wenxuanx.wu at intel.com>
---
app/test-pmd/testpmd.c | 33 ++++++++++++++++-----------------
1 file changed, 16 insertions(+), 17 deletions(-)
diff --git a/app/test-pmd/testpmd.c b/app/test-pmd/testpmd.c
index e1da961311..dcba11f7a6 100644
--- a/app/test-pmd/testpmd.c
+++ b/app/test-pmd/testpmd.c
@@ -3805,15 +3805,23 @@ init_port_config(void)
}
}
-void set_port_slave_flag(portid_t slave_pid)
+void
+set_port_slave_flag(portid_t slave_pid)
{
struct rte_port *port;
-
+ struct rte_eth_dev_info dev_info;
+ int ret;
port = &ports[slave_pid];
- port->slave_flag = 1;
+ ret = eth_dev_info_get_print_err(slave_pid, &dev_info);
+ if (ret != 0)
+ return;
+
+ if (*dev_info.dev_flags & RTE_ETH_DEV_BONDED_SLAVE)
+ port->slave_flag = 1;
}
-void clear_port_slave_flag(portid_t slave_pid)
+void
+clear_port_slave_flag(portid_t slave_pid)
{
struct rte_port *port;
@@ -3821,26 +3829,17 @@ void clear_port_slave_flag(portid_t slave_pid)
port->slave_flag = 0;
}
-uint8_t port_is_bonding_slave(portid_t slave_pid)
+uint8_t
+port_is_bonding_slave(portid_t slave_pid)
{
struct rte_port *port;
- struct rte_eth_dev_info dev_info;
- int ret;
-
port = &ports[slave_pid];
- ret = eth_dev_info_get_print_err(slave_pid, &dev_info);
- if (ret != 0) {
- TESTPMD_LOG(ERR,
- "Failed to get device info for port id %d,"
- "cannot determine if the port is a bonded slave",
- slave_pid);
- return 0;
- }
- if ((*dev_info.dev_flags & RTE_ETH_DEV_BONDED_SLAVE) || (port->slave_flag == 1))
+ if (port->slave_flag == 1)
return 1;
return 0;
}
+
const uint16_t vlan_tags[] = {
0, 1, 2, 3, 4, 5, 6, 7,
8, 9, 10, 11, 12, 13, 14, 15,
--
2.25.1
More information about the stable
mailing list