aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPierre-Yves Kerbrat <[email protected]>2018-01-26 11:24:12 +0100
committerJeff Kirsher <[email protected]>2018-03-05 13:34:59 -0800
commitaea3fca005fb45f80869f2e8d56fd4e64c1d1fdb (patch)
treec96de5cf61678afa350ab67ab892028616191b9b
parent4e7dc08e57c95673d2edaba8983c3de4dd1f65f5 (diff)
e1000e: allocate ring descriptors with dma_zalloc_coherent
Descriptor rings were not initialized at zero when allocated When area contained garbage data, it caused skb_over_panic in e1000_clean_rx_irq (if data had E1000_RXD_STAT_DD bit set) This patch makes use of dma_zalloc_coherent to make sure the ring is memset at 0 to prevent the area from containing garbage. Following is the signature of the panic: [email protected]: skbuff: skb_over_panic: text:80407b20 len:64010 put:64010 head:ab46d800 data:ab46d842 tail:0xab47d24c end:0xab46df40 dev:eth0 [email protected]: BUG: failure at net/core/skbuff.c:105/skb_panic()! [email protected]: Kernel panic - not syncing: BUG! [email protected]: [email protected]: Process swapper/0 (pid: 0, threadinfo=81728000, task=8173cc00 ,cpu: 0) [email protected]: SP = <815a1c0c> [email protected]: Stack: 00000001 [email protected]: b2d89800 815e33ac [email protected]: ea73c040 00000001 [email protected]: 60040003 0000fa0a [email protected]: 00000002 [email protected]: [email protected]: 804540c0 815a1c70 [email protected]: b2744000 602ac070 [email protected]: 815a1c44 b2d89800 [email protected]: 8173cc00 815a1c08 [email protected]: [email protected]: 00000006 [email protected]: 815a1b50 00000000 [email protected]: 80079434 00000001 [email protected]: ab46df40 b2744000 [email protected]: b2d89800 [email protected]: [email protected]: 0000fa0a 8045745c [email protected]: 815a1c88 0000fa0a [email protected]: 80407b20 b2789f80 [email protected]: 00000005 80407b20 [email protected]: [email protected]: [email protected]: Call Trace: [email protected]: [<804540bc>] skb_panic+0xa4/0xa8 [email protected]: [<80079430>] console_unlock+0x2f8/0x6d0 [email protected]: [<80457458>] skb_put+0xa0/0xc0 [email protected]: [<80407b1c>] e1000_clean_rx_irq+0x2dc/0x3e8 [email protected]: [<80407b1c>] e1000_clean_rx_irq+0x2dc/0x3e8 [email protected]: [<804079c8>] e1000_clean_rx_irq+0x188/0x3e8 [email protected]: [<80407b1c>] e1000_clean_rx_irq+0x2dc/0x3e8 [email protected]: [<80468b48>] __dev_kfree_skb_any+0x88/0xa8 [email protected]: [<804101ac>] e1000e_poll+0x94/0x288 [email protected]: [<8046e9d4>] net_rx_action+0x19c/0x4e8 [email protected]: ... [email protected]: Maximum depth to print reached. Use kstack=<maximum_depth_to_print> To specify a custom value (where 0 means to display the full backtrace) [email protected]: ---[ end Kernel panic - not syncing: BUG! Signed-off-by: Pierre-Yves Kerbrat <[email protected]> Signed-off-by: Marius Gligor <[email protected]> Tested-by: Aaron Brown <[email protected]> Reviewed-by: Alexander Duyck <[email protected]> Signed-off-by: Jeff Kirsher <[email protected]>
-rw-r--r--drivers/net/ethernet/intel/e1000e/netdev.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/drivers/net/ethernet/intel/e1000e/netdev.c b/drivers/net/ethernet/intel/e1000e/netdev.c
index 9fd4050a91ca..c0f23446bf26 100644
--- a/drivers/net/ethernet/intel/e1000e/netdev.c
+++ b/drivers/net/ethernet/intel/e1000e/netdev.c
@@ -2323,8 +2323,8 @@ static int e1000_alloc_ring_dma(struct e1000_adapter *adapter,
{
struct pci_dev *pdev = adapter->pdev;
- ring->desc = dma_alloc_coherent(&pdev->dev, ring->size, &ring->dma,
- GFP_KERNEL);
+ ring->desc = dma_zalloc_coherent(&pdev->dev, ring->size, &ring->dma,
+ GFP_KERNEL);
if (!ring->desc)
return -ENOMEM;