Patch "IB/hfi1: Correctly move list in sc_disable()" has been added to the 6.0-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

    IB/hfi1: Correctly move list in sc_disable()

to the 6.0-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:
     ib-hfi1-correctly-move-list-in-sc_disable.patch
and it can be found in the queue-6.0 subdirectory.

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



commit a2bb2dff0179d0eee5137886330092b93d761576
Author: Dean Luick <dean.luick@xxxxxxxxxxxxxxxxxxxx>
Date:   Tue Oct 18 10:27:50 2022 -0400

    IB/hfi1: Correctly move list in sc_disable()
    
    [ Upstream commit 1afac08b39d85437187bb2a92d89a741b1078f55 ]
    
    Commit 13bac861952a ("IB/hfi1: Fix abba locking issue with sc_disable()")
    incorrectly tries to move a list from one list head to another.  The
    result is a kernel crash.
    
    The crash is triggered when a link goes down and there are waiters for a
    send to complete.  The following signature is seen:
    
      BUG: kernel NULL pointer dereference, address: 0000000000000030
      [...]
      Call Trace:
       sc_disable+0x1ba/0x240 [hfi1]
       pio_freeze+0x3d/0x60 [hfi1]
       handle_freeze+0x27/0x1b0 [hfi1]
       process_one_work+0x1b0/0x380
       ? process_one_work+0x380/0x380
       worker_thread+0x30/0x360
       ? process_one_work+0x380/0x380
       kthread+0xd7/0x100
       ? kthread_complete_and_exit+0x20/0x20
       ret_from_fork+0x1f/0x30
    
    The fix is to use the correct call to move the list.
    
    Fixes: 13bac861952a ("IB/hfi1: Fix abba locking issue with sc_disable()")
    Signed-off-by: Dean Luick <dean.luick@xxxxxxxxxxxxxxxxxxxx>
    Signed-off-by: Dennis Dalessandro <dennis.dalessandro@xxxxxxxxxxxxxxxxxxxx>
    Link: https://lore.kernel.org/r/166610327042.674422.6146908799669288976.stgit@xxxxxxxxxxxxxxxxxxxxxxxxxxxx
    Signed-off-by: Leon Romanovsky <leon@xxxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/drivers/infiniband/hw/hfi1/pio.c b/drivers/infiniband/hw/hfi1/pio.c
index 3d42bd2b36bd..51ae58c02b15 100644
--- a/drivers/infiniband/hw/hfi1/pio.c
+++ b/drivers/infiniband/hw/hfi1/pio.c
@@ -913,8 +913,7 @@ void sc_disable(struct send_context *sc)
 	spin_unlock(&sc->release_lock);
 
 	write_seqlock(&sc->waitlock);
-	if (!list_empty(&sc->piowait))
-		list_move(&sc->piowait, &wake_list);
+	list_splice_init(&sc->piowait, &wake_list);
 	write_sequnlock(&sc->waitlock);
 	while (!list_empty(&wake_list)) {
 		struct iowait *wait;



[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