Patch "ieee802154/adf7242: defer destroy_workqueue call" has been added to the 5.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

    ieee802154/adf7242: defer destroy_workqueue call

to the 5.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:
     ieee802154-adf7242-defer-destroy_workqueue-call.patch
and it can be found in the queue-5.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 66071bfe9243c2077bb27e412c90babea827fcbe
Author: Lin Ma <linma@xxxxxxxxxx>
Date:   Mon Aug 8 11:42:24 2022 +0800

    ieee802154/adf7242: defer destroy_workqueue call
    
    [ Upstream commit afe7116f6d3b888778ed6d95e3cf724767b9aedf ]
    
    There is a possible race condition (use-after-free) like below
    
      (FREE)                     |  (USE)
      adf7242_remove             |  adf7242_channel
       cancel_delayed_work_sync  |
        destroy_workqueue (1)    |   adf7242_cmd_rx
                                 |    mod_delayed_work (2)
                                 |
    
    The root cause for this race is that the upper layer (ieee802154) is
    unaware of this detaching event and the function adf7242_channel can
    be called without any checks.
    
    To fix this, we can add a flag write at the beginning of adf7242_remove
    and add flag check in adf7242_channel. Or we can just defer the
    destructive operation like other commit 3e0588c291d6 ("hamradio: defer
    ax25 kfree after unregister_netdev") which let the
    ieee802154_unregister_hw() to handle the synchronization. This patch
    takes the second option.
    
    Fixes: 58e9683d1475 ("net: ieee802154: adf7242: Fix OCL calibration
    runs")
    Signed-off-by: Lin Ma <linma@xxxxxxxxxx>
    Acked-by: Michael Hennerich <michael.hennerich@xxxxxxxxxx>
    Link: https://lore.kernel.org/r/20220808034224.12642-1-linma@xxxxxxxxxx
    Signed-off-by: Stefan Schmidt <stefan@xxxxxxxxxxxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/drivers/net/ieee802154/adf7242.c b/drivers/net/ieee802154/adf7242.c
index 6afdf1622944e..5cf218c674a5a 100644
--- a/drivers/net/ieee802154/adf7242.c
+++ b/drivers/net/ieee802154/adf7242.c
@@ -1310,10 +1310,11 @@ static void adf7242_remove(struct spi_device *spi)
 
 	debugfs_remove_recursive(lp->debugfs_root);
 
+	ieee802154_unregister_hw(lp->hw);
+
 	cancel_delayed_work_sync(&lp->work);
 	destroy_workqueue(lp->wqueue);
 
-	ieee802154_unregister_hw(lp->hw);
 	mutex_destroy(&lp->bmux);
 	ieee802154_free_hw(lp->hw);
 }



[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