Patch "net/smc: fix using of uninitialized completions" has been added to the 5.15-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

    net/smc: fix using of uninitialized completions

to the 5.15-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:
     net-smc-fix-using-of-uninitialized-completions.patch
and it can be found in the queue-5.15 subdirectory.

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



commit b65035dd9568a56faab05b6267f5ca21aba336e5
Author: Karsten Graul <kgraul@xxxxxxxxxxxxx>
Date:   Mon Dec 27 14:35:30 2021 +0100

    net/smc: fix using of uninitialized completions
    
    [ Upstream commit 6d7373dabfd3933ee30c40fc8c09d2a788f6ece1 ]
    
    In smc_wr_tx_send_wait() the completion on index specified by
    pend->idx is initialized and after smc_wr_tx_send() was called the wait
    for completion starts. pend->idx is used to get the correct index for
    the wait, but the pend structure could already be cleared in
    smc_wr_tx_process_cqe().
    Introduce pnd_idx to hold and use a local copy of the correct index.
    
    Fixes: 09c61d24f96d ("net/smc: wait for departure of an IB message")
    Signed-off-by: Karsten Graul <kgraul@xxxxxxxxxxxxx>
    Signed-off-by: David S. Miller <davem@xxxxxxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/net/smc/smc_wr.c b/net/smc/smc_wr.c
index a419e9af36b98..c9cd7a4c5acfc 100644
--- a/net/smc/smc_wr.c
+++ b/net/smc/smc_wr.c
@@ -288,18 +288,20 @@ int smc_wr_tx_send_wait(struct smc_link *link, struct smc_wr_tx_pend_priv *priv,
 			unsigned long timeout)
 {
 	struct smc_wr_tx_pend *pend;
+	u32 pnd_idx;
 	int rc;
 
 	pend = container_of(priv, struct smc_wr_tx_pend, priv);
 	pend->compl_requested = 1;
-	init_completion(&link->wr_tx_compl[pend->idx]);
+	pnd_idx = pend->idx;
+	init_completion(&link->wr_tx_compl[pnd_idx]);
 
 	rc = smc_wr_tx_send(link, priv);
 	if (rc)
 		return rc;
 	/* wait for completion by smc_wr_tx_process_cqe() */
 	rc = wait_for_completion_interruptible_timeout(
-					&link->wr_tx_compl[pend->idx], timeout);
+					&link->wr_tx_compl[pnd_idx], timeout);
 	if (rc <= 0)
 		rc = -ENODATA;
 	if (rc > 0)



[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