pxa168_eth: Allocate receive queue initialized to zero
authorLubomir Rintel <lkundrak@v3.sk>
Tue, 18 Jun 2013 17:30:48 +0000 (19:30 +0200)
committerDavid S. Miller <davem@davemloft.net>
Thu, 20 Jun 2013 05:18:52 +0000 (22:18 -0700)
Zero pointer in rx_skb or tx_skb is how respective *_deinit() functions find
out that a skb slot is unallocated. If *_init() functions unsuccessfully return
after the allocation (e.g. when subsequent dma_alloc_coherent() is not
successful), this would result in attempt to kfree() invalid pointers.

Signed-off-by: Lubomir Rintel <lkundrak@v3.sk>
Cc: Kosta Zertsekel <konszert@marvell.com>
Cc: netdev@vger.kernel.org
Cc: linux-kernel@vger.kernel.org
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/marvell/pxa168_eth.c

index 339bb323cb0c99c91bf2741cbfea918e7ae4499d..1c8af8ba08d92fdfe62e7ace6288d2b823823c67 100644 (file)
@@ -1015,7 +1015,7 @@ static int rxq_init(struct net_device *dev)
        int rx_desc_num = pep->rx_ring_size;
 
        /* Allocate RX skb rings */
-       pep->rx_skb = kmalloc(sizeof(*pep->rx_skb) * pep->rx_ring_size,
+       pep->rx_skb = kzalloc(sizeof(*pep->rx_skb) * pep->rx_ring_size,
                             GFP_KERNEL);
        if (!pep->rx_skb)
                return -ENOMEM;
@@ -1076,7 +1076,7 @@ static int txq_init(struct net_device *dev)
        int size = 0, i = 0;
        int tx_desc_num = pep->tx_ring_size;
 
-       pep->tx_skb = kmalloc(sizeof(*pep->tx_skb) * pep->tx_ring_size,
+       pep->tx_skb = kzalloc(sizeof(*pep->tx_skb) * pep->tx_ring_size,
                             GFP_KERNEL);
        if (!pep->tx_skb)
                return -ENOMEM;