Re: [PATCH net 4/7] qlge: Fixed double pci free upon tx_ring->q allocation failure.
From: Ben Hutchings <hidden>
Date: 2012-07-03 01:22:04
On Mon, 2012-07-02 at 19:41 -0400, Jitendra Kalsaria wrote:
quoted hunk ↗ jump to hunk
From: Jitendra Kalsaria <redacted> Signed-off-by: Jitendra Kalsaria <redacted> --- drivers/net/ethernet/qlogic/qlge/qlge_main.c | 14 +++++++------- 1 files changed, 7 insertions(+), 7 deletions(-)diff --git a/drivers/net/ethernet/qlogic/qlge/qlge_main.c b/drivers/net/ethernet/qlogic/qlge/qlge_main.c index cdbc860..9ecd15f 100644 --- a/drivers/net/ethernet/qlogic/qlge/qlge_main.c +++ b/drivers/net/ethernet/qlogic/qlge/qlge_main.c@@ -2701,20 +2701,20 @@ static int ql_alloc_tx_resources(struct ql_adapter *qdev, pci_alloc_consistent(qdev->pdev, tx_ring->wq_size, &tx_ring->wq_base_dma); - if ((tx_ring->wq_base == NULL) || - tx_ring->wq_base_dma & WQ_ADDR_ALIGN) { - netif_err(qdev, ifup, qdev->ndev, "tx_ring alloc failed.\n"); - return -ENOMEM; - } + if (!tx_ring->wq_base || tx_ring->wq_base_dma & WQ_ADDR_ALIGN) + goto err; +
So in case pci_alloc_consistent() fails, you now try to free anyway. Not sure whether that's safe; do you feel lucky?
tx_ring->q = kmalloc(tx_ring->wq_len * sizeof(struct tx_ring_desc), GFP_KERNEL); - if (tx_ring->q == NULL) + if (!tx_ring->q) goto err;
Unrelated change.
return 0; err: pci_free_consistent(qdev->pdev, tx_ring->wq_size, - tx_ring->wq_base, tx_ring->wq_base_dma); + tx_ring->wq_base, tx_ring->wq_base_dma);
This was nicely indented before...
+ tx_ring->wq_base = NULL; + netif_err(qdev, ifup, qdev->ndev, "tx_ring alloc failed.\n"); return -ENOMEM; }
-- Ben Hutchings, Staff Engineer, Solarflare Not speaking for my employer; that's the marketing department's job. They asked us to note that Solarflare product names are trademarked.