Patch "i40e: Fix NULL ptr dereference on VSI filter sync" has been added to the 4.19-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 4.19-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-4.19 subdirectory.

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



commit 29b859d360c29f6036750d55d9d156e61a2583b5
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 3c921dfc20564..519b595944235 100644
--- a/drivers/net/ethernet/intel/i40e/i40e.h
+++ b/drivers/net/ethernet/intel/i40e/i40e.h
@@ -166,6 +166,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 062b942517822..d948ca6368422 100644
--- a/drivers/net/ethernet/intel/i40e/i40e_main.c
+++ b/drivers/net/ethernet/intel/i40e/i40e_main.c
@@ -2584,7 +2584,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) {
@@ -12444,7 +12445,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