> -----Original Message----- > From: Intel-wired-lan <intel-wired-lan-boun...@osuosl.org> On Behalf Of > Aleksandr Loktionov > Sent: 16 October 2024 15:00 > To: intel-wired-...@lists.osuosl.org; Nguyen, Anthony L > <anthony.l.ngu...@intel.com>; Loktionov, Aleksandr > <aleksandr.loktio...@intel.com> > Cc: net...@vger.kernel.org > Subject: [Intel-wired-lan] [PATCH iwl-net v2] i40e: fix race condition by > adding filter's intermediate sync state > > Fix a race condition in the i40e driver that leads to MAC/VLAN filters > becoming corrupted and leaking. Address the issue that occurs under heavy > load when multiple threads are concurrently modifying MAC/VLAN filters by > setting mac and port VLAN. > > 1. Thread T0 allocates a filter in i40e_add_filter() within > i40e_ndo_set_vf_port_vlan(). > 2. Thread T1 concurrently frees the filter in __i40e_del_filter() within > i40e_ndo_set_vf_mac(). > 3. Subsequently, i40e_service_task() calls i40e_sync_vsi_filters(), which > refers to the already freed filter memory, causing corruption. > > Reproduction steps: > 1. Spawn multiple VFs. > 2. Apply a concurrent heavy load by running parallel operations to change > MAC addresses on the VFs and change port VLANs on the host. > 3. Observe errors in dmesg: > "Error I40E_AQ_RC_ENOSPC adding RX filters on VF XX, > please set promiscuous on manually for VF XX". > > Exact code for stable reproduction Intel can't open-source now. > > The fix involves implementing a new intermediate filter state, > I40E_FILTER_NEW_SYNC, for the time when a filter is on a tmp_add_list. > These filters cannot be deleted from the hash list directly but must be > removed using the full process. > > Fixes: 278e7d0b9d68 ("i40e: store MAC/VLAN filters in a hash with the MAC > Address as key") > Signed-off-by: Aleksandr Loktionov <aleksandr.loktio...@intel.com> > --- > v1->v2 change commit title, removed RESERVED state byt request in review > --- > drivers/net/ethernet/intel/i40e/i40e.h | 2 ++ > drivers/net/ethernet/intel/i40e/i40e_debugfs.c | 1 + > drivers/net/ethernet/intel/i40e/i40e_main.c | 12 ++++++++++-- > 3 files changed, 13 insertions(+), 2 deletions(-) >
Tested-by: Pucha Himasekhar Reddy <himasekharx.reddy.pu...@intel.com> (A Contingent worker at Intel)