3c59x: Fix resource leaks in vortex_open
When vortex_up is failed, the skb buffers allocated by __netdev_alloc_skb in vortex_open are not released, which may cause resource leaks. This bug has been submitted before. This patch modifies the error handling code to fix it. Signed-off-by: Jia-Ju Bai <baijiaju1990@163.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
Родитель
468b732b6f
Коммит
2fc09962e2
|
@ -1763,16 +1763,9 @@ vortex_open(struct net_device *dev)
|
|||
vp->rx_ring[i].addr = cpu_to_le32(pci_map_single(VORTEX_PCI(vp), skb->data, PKT_BUF_SZ, PCI_DMA_FROMDEVICE));
|
||||
}
|
||||
if (i != RX_RING_SIZE) {
|
||||
int j;
|
||||
pr_emerg("%s: no memory for rx ring\n", dev->name);
|
||||
for (j = 0; j < i; j++) {
|
||||
if (vp->rx_skbuff[j]) {
|
||||
dev_kfree_skb(vp->rx_skbuff[j]);
|
||||
vp->rx_skbuff[j] = NULL;
|
||||
}
|
||||
}
|
||||
retval = -ENOMEM;
|
||||
goto err_free_irq;
|
||||
goto err_free_skb;
|
||||
}
|
||||
/* Wrap the ring. */
|
||||
vp->rx_ring[i-1].next = cpu_to_le32(vp->rx_ring_dma);
|
||||
|
@ -1782,7 +1775,13 @@ vortex_open(struct net_device *dev)
|
|||
if (!retval)
|
||||
goto out;
|
||||
|
||||
err_free_irq:
|
||||
err_free_skb:
|
||||
for (i = 0; i < RX_RING_SIZE; i++) {
|
||||
if (vp->rx_skbuff[i]) {
|
||||
dev_kfree_skb(vp->rx_skbuff[i]);
|
||||
vp->rx_skbuff[i] = NULL;
|
||||
}
|
||||
}
|
||||
free_irq(dev->irq, dev);
|
||||
err:
|
||||
if (vortex_debug > 1)
|
||||
|
|
Загрузка…
Ссылка в новой задаче