Patch "atm: solos-pci: Fix potential deadlock on &cli_queue_lock" has been added to the 6.6-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

    atm: solos-pci: Fix potential deadlock on &cli_queue_lock

to the 6.6-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:
     atm-solos-pci-fix-potential-deadlock-on-cli_queue_lo.patch
and it can be found in the queue-6.6 subdirectory.

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



commit 4a6feb340d4952edc01932d371baeb65dfdfdae9
Author: Chengfeng Ye <dg573847474@xxxxxxxxx>
Date:   Thu Dec 7 12:34:37 2023 +0000

    atm: solos-pci: Fix potential deadlock on &cli_queue_lock
    
    [ Upstream commit d5dba32b8f6cb39be708b726044ba30dbc088b30 ]
    
    As &card->cli_queue_lock is acquired under softirq context along the
    following call chain from solos_bh(), other acquisition of the same
    lock inside process context should disable at least bh to avoid double
    lock.
    
    <deadlock #1>
    console_show()
    --> spin_lock(&card->cli_queue_lock)
    <interrupt>
       --> solos_bh()
       --> spin_lock(&card->cli_queue_lock)
    
    This flaw was found by an experimental static analysis tool I am
    developing for irq-related deadlock.
    
    To prevent the potential deadlock, the patch uses spin_lock_bh()
    on the card->cli_queue_lock under process context code consistently
    to prevent the possible deadlock scenario.
    
    Fixes: 9c54004ea717 ("atm: Driver for Solos PCI ADSL2+ card.")
    Signed-off-by: Chengfeng Ye <dg573847474@xxxxxxxxx>
    Signed-off-by: David S. Miller <davem@xxxxxxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/drivers/atm/solos-pci.c b/drivers/atm/solos-pci.c
index 94fbc3abe60e6..95f768b28a5e6 100644
--- a/drivers/atm/solos-pci.c
+++ b/drivers/atm/solos-pci.c
@@ -449,9 +449,9 @@ static ssize_t console_show(struct device *dev, struct device_attribute *attr,
 	struct sk_buff *skb;
 	unsigned int len;
 
-	spin_lock(&card->cli_queue_lock);
+	spin_lock_bh(&card->cli_queue_lock);
 	skb = skb_dequeue(&card->cli_queue[SOLOS_CHAN(atmdev)]);
-	spin_unlock(&card->cli_queue_lock);
+	spin_unlock_bh(&card->cli_queue_lock);
 	if(skb == NULL)
 		return sprintf(buf, "No data.\n");
 




[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