mv643xx_eth: Allocate receive queue initialized to zero
authorLubomir Rintel <lkundrak@v3.sk>
Tue, 18 Jun 2013 17:32:38 +0000 (19:32 +0200)
committerDavid S. Miller <davem@davemloft.net>
Thu, 20 Jun 2013 05:18:52 +0000 (22:18 -0700)
Zero pointer in rx_skb is how respective rxq_deinit() finds out out that a skb
slot is unallocated. If rxq_refill() fails (e.g. on OOM condition), subsequent
teardown would result in an attempt to kfree() invalid pointers.

Signed-off-by: Lubomir Rintel <lkundrak@v3.sk>
Cc: Lennert Buytenhek <buytenh@wantstofly.org>
Cc: netdev@vger.kernel.org
Cc: linux-kernel@vger.kernel.org
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/marvell/mv643xx_eth.c

index 2ad1494efbb3021e796481da6c4f48f21e63ca30..d1cbfb12c1ca35cb9f0c0521a4b38bb847cbd199 100644 (file)
@@ -1757,7 +1757,7 @@ static int rxq_init(struct mv643xx_eth_private *mp, int index)
        memset(rxq->rx_desc_area, 0, size);
 
        rxq->rx_desc_area_size = size;
-       rxq->rx_skb = kmalloc_array(rxq->rx_ring_size, sizeof(*rxq->rx_skb),
+       rxq->rx_skb = kcalloc(rxq->rx_ring_size, sizeof(*rxq->rx_skb),
                                    GFP_KERNEL);
        if (rxq->rx_skb == NULL)
                goto out_free;