Patch "i40e: Fix NULL ptr dereference on VSI filter sync" has been added to the 5.10-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    i40e: Fix NULL ptr dereference on VSI filter sync

to the 5.10-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     i40e-fix-null-ptr-dereference-on-vsi-filter-sync.patch
and it can be found in the queue-5.10 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit ce7428f23784a2f1aa490fbc40ee5ad77373367d
Author: Michal Maloszewski <michal.maloszewski@xxxxxxxxx>
Date:   Wed Feb 24 12:07:48 2021 +0000

    i40e: Fix NULL ptr dereference on VSI filter sync
    
    [ Upstream commit 37d9e304acd903a445df8208b8a13d707902dea6 ]
    
    Remove the reason of null pointer dereference in sync VSI filters.
    Added new I40E_VSI_RELEASING flag to signalize deleting and releasing
    of VSI resources to sync this thread with sync filters subtask.
    Without this patch it is possible to start update the VSI filter list
    after VSI is removed, that's causing a kernel oops.
    
    Fixes: 41c445ff0f48 ("i40e: main driver core")
    Signed-off-by: Grzegorz Szczurek <grzegorzx.szczurek@xxxxxxxxx>
    Signed-off-by: Michal Maloszewski <michal.maloszewski@xxxxxxxxx>
    Reviewed-by: Przemyslaw Patynowski <przemyslawx.patynowski@xxxxxxxxx>
    Reviewed-by: Witold Fijalkowski <witoldx.fijalkowski@xxxxxxxxx>
    Reviewed-by: Jaroslaw Gawin <jaroslawx.gawin@xxxxxxxxx>
    Reviewed-by: Aleksandr Loktionov <aleksandr.loktionov@xxxxxxxxx>
    Tested-by: Tony Brelinski <tony.brelinski@xxxxxxxxx>
    Signed-off-by: Tony Nguyen <anthony.l.nguyen@xxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/drivers/net/ethernet/intel/i40e/i40e.h b/drivers/net/ethernet/intel/i40e/i40e.h
index fe1258778cbc4..1f31f503fa92b 100644
--- a/drivers/net/ethernet/intel/i40e/i40e.h
+++ b/drivers/net/ethernet/intel/i40e/i40e.h
@@ -159,6 +159,7 @@ enum i40e_vsi_state_t {
 	__I40E_VSI_OVERFLOW_PROMISC,
 	__I40E_VSI_REINIT_REQUESTED,
 	__I40E_VSI_DOWN_REQUESTED,
+	__I40E_VSI_RELEASING,
 	/* This must be last as it determines the size of the BITMAP */
 	__I40E_VSI_STATE_SIZE__,
 };
diff --git a/drivers/net/ethernet/intel/i40e/i40e_main.c b/drivers/net/ethernet/intel/i40e/i40e_main.c
index 52c2d6fdeb7a0..72405a0aabde7 100644
--- a/drivers/net/ethernet/intel/i40e/i40e_main.c
+++ b/drivers/net/ethernet/intel/i40e/i40e_main.c
@@ -2622,7 +2622,8 @@ static void i40e_sync_filters_subtask(struct i40e_pf *pf)
 
 	for (v = 0; v < pf->num_alloc_vsi; v++) {
 		if (pf->vsi[v] &&
-		    (pf->vsi[v]->flags & I40E_VSI_FLAG_FILTER_CHANGED)) {
+		    (pf->vsi[v]->flags & I40E_VSI_FLAG_FILTER_CHANGED) &&
+		    !test_bit(__I40E_VSI_RELEASING, pf->vsi[v]->state)) {
 			int ret = i40e_sync_vsi_filters(pf->vsi[v]);
 
 			if (ret) {
@@ -13308,7 +13309,7 @@ int i40e_vsi_release(struct i40e_vsi *vsi)
 		dev_info(&pf->pdev->dev, "Can't remove PF VSI\n");
 		return -ENODEV;
 	}
-
+	set_bit(__I40E_VSI_RELEASING, vsi->state);
 	uplink_seid = vsi->uplink_seid;
 	if (vsi->type != I40E_VSI_SRIOV) {
 		if (vsi->netdev_registered) {



[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux