From 0c16506e5947f65f4d4ff3a4c3e428e52158e5de Mon Sep 17 00:00:00 2001 From: Andrew Rybchenko Date: Wed, 29 Mar 2017 09:28:25 +0100 Subject: [PATCH] net/sfc: fix leak if EvQ DMA space allocation fails Fixes: 58294ee65afb ("net/sfc: support event queue") Cc: stable@dpdk.org Signed-off-by: Andrew Rybchenko --- drivers/net/sfc/sfc_ev.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/drivers/net/sfc/sfc_ev.c b/drivers/net/sfc/sfc_ev.c index 24071b26c4..800b08ea34 100644 --- a/drivers/net/sfc/sfc_ev.c +++ b/drivers/net/sfc/sfc_ev.c @@ -800,10 +800,11 @@ sfc_ev_qinit(struct sfc_adapter *sa, unsigned int sw_index, SFC_ASSERT(entries <= evq_info->max_entries); evq_info->entries = entries; + rc = ENOMEM; evq = rte_zmalloc_socket("sfc-evq", sizeof(*evq), RTE_CACHE_LINE_SIZE, socket_id); if (evq == NULL) - return ENOMEM; + goto fail_evq_alloc; evq->sa = sa; evq->evq_index = sw_index; @@ -812,13 +813,21 @@ sfc_ev_qinit(struct sfc_adapter *sa, unsigned int sw_index, rc = sfc_dma_alloc(sa, "evq", sw_index, EFX_EVQ_SIZE(evq_info->entries), socket_id, &evq->mem); if (rc != 0) - return rc; + goto fail_dma_alloc; evq->init_state = SFC_EVQ_INITIALIZED; evq_info->evq = evq; return 0; + +fail_dma_alloc: + rte_free(evq); + +fail_evq_alloc: + + sfc_log_init(sa, "failed %d", rc); + return rc; } void