aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/ethernet/intel
diff options
context:
space:
mode:
authorEmil Tantilov <emil.s.tantilov@intel.com>2016-09-22 18:06:52 -0400
committerJeff Kirsher <jeffrey.t.kirsher@intel.com>2016-10-27 17:07:21 -0400
commita3b8cb1f84a0de95323902c76bab245675d6d218 (patch)
tree9f2c66cc3af0300efd028ac1423f8126ec9ec95e /drivers/net/ethernet/intel
parentd5d32e4b76687f4df9ad3ba8d3702b7347f51fa6 (diff)
ixgbe: fix panic when using macvlan with l2-fwd-offload enabled
Fix NULL pointer dereference in the case where a macvlan interface is brought up while the PF is still down: BUG: unable to handle kernel NULL pointer dereference at 0000000000000010 IP: [<ffffffffa0170fb2>] ixgbe_alloc_rx_buffers+0x42/0x1a0 [ixgbe] Call Trace: [<ffffffffa017336b>] ixgbe_configure_rx_ring+0x2eb/0x3d0 [ixgbe] [<ffffffffa0173811>] ixgbe_fwd_ring_up+0xd1/0x380 [ixgbe] [<ffffffffa0179709>] ixgbe_fwd_add+0x149/0x230 [ixgbe] [<ffffffffa0113480>] macvlan_open+0x260/0x2b0 [macvlan] Reported-by: Matthew Garrett <mjg59@coreos.com> Signed-off-by: Emil Tantilov <emil.s.tantilov@intel.com> Tested-by: Andrew Bowers <andrewx.bowers@intel.com> Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
Diffstat (limited to 'drivers/net/ethernet/intel')
-rw-r--r--drivers/net/ethernet/intel/ixgbe/ixgbe_main.c12
1 files changed, 8 insertions, 4 deletions
diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
index a244d9a67264..bd93d823cc25 100644
--- a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
+++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
@@ -9135,10 +9135,14 @@ static void *ixgbe_fwd_add(struct net_device *pdev, struct net_device *vdev)
9135 goto fwd_add_err; 9135 goto fwd_add_err;
9136 fwd_adapter->pool = pool; 9136 fwd_adapter->pool = pool;
9137 fwd_adapter->real_adapter = adapter; 9137 fwd_adapter->real_adapter = adapter;
9138 err = ixgbe_fwd_ring_up(vdev, fwd_adapter); 9138
9139 if (err) 9139 if (netif_running(pdev)) {
9140 goto fwd_add_err; 9140 err = ixgbe_fwd_ring_up(vdev, fwd_adapter);
9141 netif_tx_start_all_queues(vdev); 9141 if (err)
9142 goto fwd_add_err;
9143 netif_tx_start_all_queues(vdev);
9144 }
9145
9142 return fwd_adapter; 9146 return fwd_adapter;
9143fwd_add_err: 9147fwd_add_err:
9144 /* unwind counter and free adapter struct */ 9148 /* unwind counter and free adapter struct */