The loop cleaning up flowdir resources was using SLIST_FOREACH but the inner loop would call rte_free. Found by building with address sanitizer undefined check.
Also remove needless initialization, and null check. Fixes: f5765f66f9bb ("net/qede: refactor flow director into generic aRFS") Cc: shahed.sha...@cavium.com Cc: sta...@dpdk.org Signed-off-by: Stephen Hemminger <step...@networkplumber.org> --- drivers/net/qede/qede_ethdev.h | 3 +-- drivers/net/qede/qede_filter.c | 13 +++++-------- 2 files changed, 6 insertions(+), 10 deletions(-) diff --git a/drivers/net/qede/qede_ethdev.h b/drivers/net/qede/qede_ethdev.h index 3015c18504..b502658425 100644 --- a/drivers/net/qede/qede_ethdev.h +++ b/drivers/net/qede/qede_ethdev.h @@ -8,8 +8,7 @@ #ifndef _QEDE_ETHDEV_H_ #define _QEDE_ETHDEV_H_ -#include <sys/queue.h> - +#include <rte_queue.h> #include <rte_ether.h> #include <ethdev_driver.h> #include <ethdev_pci.h> diff --git a/drivers/net/qede/qede_filter.c b/drivers/net/qede/qede_filter.c index 14fb4338e9..c3f74c89d9 100644 --- a/drivers/net/qede/qede_filter.c +++ b/drivers/net/qede/qede_filter.c @@ -154,15 +154,12 @@ int qede_check_fdir_support(struct rte_eth_dev *eth_dev) void qede_fdir_dealloc_resc(struct rte_eth_dev *eth_dev) { struct qede_dev *qdev = QEDE_INIT_QDEV(eth_dev); - struct qede_arfs_entry *tmp = NULL; + struct qede_arfs_entry *tmp, *tmp2; - SLIST_FOREACH(tmp, &qdev->arfs_info.arfs_list_head, list) { - if (tmp) { - rte_memzone_free(tmp->mz); - SLIST_REMOVE(&qdev->arfs_info.arfs_list_head, tmp, - qede_arfs_entry, list); - rte_free(tmp); - } + SLIST_FOREACH_SAFE(tmp, &qdev->arfs_info.arfs_list_head, list, tmp2) { + rte_memzone_free(tmp->mz); + SLIST_REMOVE(&qdev->arfs_info.arfs_list_head, tmp, qede_arfs_entry, list); + rte_free(tmp); } } -- 2.47.2