Message ID | 20120403001327.GB10227@Neptun |
---|---|
State | Changes Requested, archived |
Delegated to: | David Miller |
Headers | show |
From: Lino Sanfilippo <LinoSanfilippo@gmx.de> Date: Tue, 3 Apr 2012 02:13:27 +0200 > In sky2_open() free_buffers() is called in case that alloc_buffers() failed. > Here we do the check for sky2->rx_le too late, since we already called > rx_clean() which accessed rx_le. Furthermore we lack a check for sky2->rx_ring > which is also accessed by rx_clean(). > > With this patch both sky2->rx_le and sky2->rx_ring are checked before > alloc_buffers() is called. > > Signed-off-by: Lino Sanfilippo <LinoSanfilippo@gmx.de> Ping? -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
From: Lino Sanfilippo <LinoSanfilippo@gmx.de> Date: Tue, 3 Apr 2012 02:13:27 +0200 > In sky2_open() free_buffers() is called in case that alloc_buffers() failed. > Here we do the check for sky2->rx_le too late, since we already called > rx_clean() which accessed rx_le. Furthermore we lack a check for sky2->rx_ring > which is also accessed by rx_clean(). > > With this patch both sky2->rx_le and sky2->rx_ring are checked before > alloc_buffers() is called. > > Signed-off-by: Lino Sanfilippo <LinoSanfilippo@gmx.de> Stephen, I'm still waiting on your review of this patch. Thanks. -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On Tue, 3 Apr 2012 02:13:27 +0200 Lino Sanfilippo <LinoSanfilippo@gmx.de> wrote: > In sky2_open() free_buffers() is called in case that alloc_buffers() failed. > Here we do the check for sky2->rx_le too late, since we already called > rx_clean() which accessed rx_le. Furthermore we lack a check for sky2->rx_ring > which is also accessed by rx_clean(). > > With this patch both sky2->rx_le and sky2->rx_ring are checked before > alloc_buffers() is called. > > Signed-off-by: Lino Sanfilippo <LinoSanfilippo@gmx.de> Looking at sky2_alloc_buffers, it really needs to change to have proper unwind instead. If some portion of the memory required isn't available everything needs to be undone. -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/drivers/net/ethernet/marvell/sky2.c b/drivers/net/ethernet/marvell/sky2.c index 760c2b1..3e3eda6 100644 --- a/drivers/net/ethernet/marvell/sky2.c +++ b/drivers/net/ethernet/marvell/sky2.c @@ -1628,9 +1628,10 @@ static void sky2_free_buffers(struct sky2_port *sky2) { struct sky2_hw *hw = sky2->hw; - sky2_rx_clean(sky2); - if (sky2->rx_le) { + if (sky2->rx_ring) + sky2_rx_clean(sky2); + pci_free_consistent(hw->pdev, RX_LE_BYTES, sky2->rx_le, sky2->rx_le_map); sky2->rx_le = NULL;
In sky2_open() free_buffers() is called in case that alloc_buffers() failed. Here we do the check for sky2->rx_le too late, since we already called rx_clean() which accessed rx_le. Furthermore we lack a check for sky2->rx_ring which is also accessed by rx_clean(). With this patch both sky2->rx_le and sky2->rx_ring are checked before alloc_buffers() is called. Signed-off-by: Lino Sanfilippo <LinoSanfilippo@gmx.de> --- This applies against 3.3 drivers/net/ethernet/marvell/sky2.c | 5 +++-- 1 files changed, 3 insertions(+), 2 deletions(-)