When failed at 'rte_intr_efd_enable()', function returned and 'rxq' is
not freed. So free 'rxq' in error handling to avoid a memory leak. We
can't not use 'goto free_rxq' instead since 'rxq' has not assigned to
'dev->data->rx_queues[rx_queue_id]', thus 'fs_rx_queue_release(dev,...)'
will not work in this case.

Fixes: 9e0360aebf236d ("net/failsafe: register as Rx interrupt mode")

Signed-off-by: Weiguo Li <[email protected]>
---
 drivers/net/failsafe/failsafe_ops.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/net/failsafe/failsafe_ops.c 
b/drivers/net/failsafe/failsafe_ops.c
index 55e21d635c..4d4e2b248f 100644
--- a/drivers/net/failsafe/failsafe_ops.c
+++ b/drivers/net/failsafe/failsafe_ops.c
@@ -444,6 +444,7 @@ fs_rx_queue_setup(struct rte_eth_dev *dev,
        rxq->sdev = PRIV(dev)->subs;
        ret = rte_intr_efd_enable(intr_handle, 1);
        if (ret < 0) {
+               rte_free(rxq);
                fs_unlock(dev, 0);
                return ret;
        }
-- 
2.25.1

Reply via email to