diff options
author | Emil Tantilov <emil.s.tantilov@intel.com> | 2016-09-22 18:06:52 -0400 |
---|---|---|
committer | Jeff Kirsher <jeffrey.t.kirsher@intel.com> | 2016-10-27 17:07:21 -0400 |
commit | a3b8cb1f84a0de95323902c76bab245675d6d218 (patch) | |
tree | 9f2c66cc3af0300efd028ac1423f8126ec9ec95e /drivers/net/ethernet/intel | |
parent | d5d32e4b76687f4df9ad3ba8d3702b7347f51fa6 (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.c | 12 |
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; |
9143 | fwd_add_err: | 9147 | fwd_add_err: |
9144 | /* unwind counter and free adapter struct */ | 9148 | /* unwind counter and free adapter struct */ |