linux_dsm_epyc7002/drivers/net/ethernet/intel/i40e
Stefan Assmann a7542b8760 i40e: check __I40E_VF_DISABLE bit in i40e_sync_filters_subtask
While testing VF spawn/destroy the following panic occurred.

BUG: unable to handle kernel NULL pointer dereference at 0000000000000029
[...]
Workqueue: i40e i40e_service_task [i40e]
RIP: 0010:i40e_sync_vsi_filters+0x6fd/0xc60 [i40e]
[...]
Call Trace:
 ? __switch_to_asm+0x35/0x70
 ? __switch_to_asm+0x41/0x70
 ? __switch_to_asm+0x35/0x70
 ? _cond_resched+0x15/0x30
 i40e_sync_filters_subtask+0x56/0x70 [i40e]
 i40e_service_task+0x382/0x11b0 [i40e]
 ? __switch_to_asm+0x41/0x70
 ? __switch_to_asm+0x41/0x70
 process_one_work+0x1a7/0x3b0
 worker_thread+0x30/0x390
 ? create_worker+0x1a0/0x1a0
 kthread+0x112/0x130
 ? kthread_bind+0x30/0x30
 ret_from_fork+0x35/0x40

Investigation revealed a race where pf->vf[vsi->vf_id].trusted may get
accessed by the watchdog via i40e_sync_filters_subtask() although
i40e_free_vfs() already free'd pf->vf.
To avoid this the call to i40e_sync_vsi_filters() in
i40e_sync_filters_subtask() needs to be guarded by __I40E_VF_DISABLE,
which is also used by i40e_free_vfs().

Note: put the __I40E_VF_DISABLE check after the
__I40E_MACVLAN_SYNC_PENDING check as the latter is more likely to
trigger.

CC: stable@vger.kernel.org
Signed-off-by: Stefan Assmann <sassmann@kpanic.de>
Tested-by: Andrew Bowers <andrewx.bowers@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
2019-09-11 09:10:45 -07:00
..
i40e_adminq_cmd.h i40e: Update FW API version to 1.9 2019-08-22 13:24:13 -07:00
i40e_adminq.c i40e: Add drop mode parameter to set mac config 2019-08-22 13:24:13 -07:00
i40e_adminq.h net: intel: Cleanup the copyright/license headers 2018-04-27 14:00:04 -04:00
i40e_alloc.h net: intel: Cleanup the copyright/license headers 2018-04-27 14:00:04 -04:00
i40e_client.c i40e: Use struct_size() in kzalloc() 2019-05-04 17:34:43 -07:00
i40e_client.h net: intel: Cleanup the copyright/license headers 2018-04-27 14:00:04 -04:00
i40e_common.c i40e: Implement debug macro hw_dbg using dev_dbg 2019-09-09 11:22:20 -07:00
i40e_dcb_nl.c i40e/i40evf: cleanup incorrect function doxygen comments 2018-04-30 09:09:04 -07:00
i40e_dcb.c i40e: Persistent LLDP support 2019-08-22 13:24:14 -07:00
i40e_dcb.h i40e: Persistent LLDP support 2019-08-22 13:24:14 -07:00
i40e_ddp.c i40e: Implement DDP support in i40e driver 2019-04-16 15:10:21 -07:00
i40e_debugfs.c i40e: Remove EMPR traces from debugfs facility 2019-09-09 11:36:43 -07:00
i40e_devids.h i40e: Add support for X710 B/P & SFP+ cards 2019-05-04 17:24:48 -07:00
i40e_diag.c net: intel: Cleanup the copyright/license headers 2018-04-27 14:00:04 -04:00
i40e_diag.h net: intel: Cleanup the copyright/license headers 2018-04-27 14:00:04 -04:00
i40e_ethtool.c i40e: Check if transceiver implements DDM before access 2019-08-22 13:24:13 -07:00
i40e_hmc.c i40e: Implement debug macro hw_dbg using dev_dbg 2019-09-09 11:22:20 -07:00
i40e_hmc.h net: intel: Cleanup the copyright/license headers 2018-04-27 14:00:04 -04:00
i40e_lan_hmc.c i40e: fix hw_dbg usage in i40e_hmc_get_object_va 2019-09-09 10:18:18 -07:00
i40e_lan_hmc.h net: intel: Cleanup the copyright/license headers 2018-04-27 14:00:04 -04:00
i40e_main.c i40e: check __I40E_VF_DISABLE bit in i40e_sync_filters_subtask 2019-09-11 09:10:45 -07:00
i40e_nvm.c i40e: Persistent LLDP support 2019-08-22 13:24:14 -07:00
i40e_osdep.h i40e: Implement debug macro hw_dbg using dev_dbg 2019-09-09 11:22:20 -07:00
i40e_prototype.h i40e: Persistent LLDP support 2019-08-22 13:24:14 -07:00
i40e_ptp.c i40e: fix incorrect function documentation comment 2019-06-26 09:18:54 -07:00
i40e_register.h i40e: check_recovery_mode had wrong if statement 2019-08-22 13:24:13 -07:00
i40e_status.h net: intel: Cleanup the copyright/license headers 2018-04-27 14:00:04 -04:00
i40e_trace.h net: intel: Cleanup the copyright/license headers 2018-04-27 14:00:04 -04:00
i40e_txrx_common.h i40e: DRY rx_ptype handling code 2018-12-12 15:46:02 -08:00
i40e_txrx.c net: Use skb_frag_off accessors 2019-07-30 14:21:32 -07:00
i40e_txrx.h net: Use skb accessors in network drivers 2019-07-22 20:47:56 -07:00
i40e_type.h i40e: Persistent LLDP support 2019-08-22 13:24:14 -07:00
i40e_virtchnl_pf.c i40e: Fix crash caused by stress setting of VF MAC addresses 2019-08-22 13:24:14 -07:00
i40e_virtchnl_pf.h i40e: don't report link up for a VF who hasn't enabled queues 2019-08-05 11:42:05 -07:00
i40e_xsk.c i40e: fix xdp handle calculations 2019-09-05 13:53:02 +02:00
i40e_xsk.h xsk: replace ndo_xsk_async_xmit with ndo_xsk_wakeup 2019-08-17 23:07:31 +02:00
i40e.h i40e: Remove EMPR traces from debugfs facility 2019-09-09 11:36:43 -07:00
Makefile i40e: Implement DDP support in i40e driver 2019-04-16 15:10:21 -07:00