Patch "RDMA/rtrs-srv: Avoid null pointer deref during path establishment" has been added to the 6.11-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

    RDMA/rtrs-srv: Avoid null pointer deref during path establishment

to the 6.11-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:
     rdma-rtrs-srv-avoid-null-pointer-deref-during-path-e.patch
and it can be found in the queue-6.11 subdirectory.

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



commit e5912cbc79a20c9d7b51fd356357a338ce185d96
Author: Md Haris Iqbal <haris.iqbal@xxxxxxxxx>
Date:   Wed Aug 21 13:22:14 2024 +0200

    RDMA/rtrs-srv: Avoid null pointer deref during path establishment
    
    [ Upstream commit d0e62bf7b575fbfe591f6f570e7595dd60a2f5eb ]
    
    For RTRS path establishment, RTRS client initiates and completes con_num
    of connections. After establishing all its connections, the information
    is exchanged between the client and server through the info_req message.
    During this exchange, it is essential that all connections have been
    established, and the state of the RTRS srv path is CONNECTED.
    
    So add these sanity checks, to make sure we detect and abort process in
    error scenarios to avoid null pointer deref.
    
    Signed-off-by: Md Haris Iqbal <haris.iqbal@xxxxxxxxx>
    Signed-off-by: Jack Wang <jinpu.wang@xxxxxxxxx>
    Signed-off-by: Grzegorz Prajsner <grzegorz.prajsner@xxxxxxxxx>
    Link: https://patch.msgid.link/20240821112217.41827-9-haris.iqbal@xxxxxxxxx
    Signed-off-by: Leon Romanovsky <leon@xxxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/drivers/infiniband/ulp/rtrs/rtrs-srv.c b/drivers/infiniband/ulp/rtrs/rtrs-srv.c
index 94ac99a4f696e..758a3d9c2844d 100644
--- a/drivers/infiniband/ulp/rtrs/rtrs-srv.c
+++ b/drivers/infiniband/ulp/rtrs/rtrs-srv.c
@@ -931,12 +931,11 @@ static void rtrs_srv_info_req_done(struct ib_cq *cq, struct ib_wc *wc)
 	if (err)
 		goto close;
 
-out:
 	rtrs_iu_free(iu, srv_path->s.dev->ib_dev, 1);
 	return;
 close:
+	rtrs_iu_free(iu, srv_path->s.dev->ib_dev, 1);
 	close_path(srv_path);
-	goto out;
 }
 
 static int post_recv_info_req(struct rtrs_srv_con *con)
@@ -987,6 +986,16 @@ static int post_recv_path(struct rtrs_srv_path *srv_path)
 			q_size = SERVICE_CON_QUEUE_DEPTH;
 		else
 			q_size = srv->queue_depth;
+		if (srv_path->state != RTRS_SRV_CONNECTING) {
+			rtrs_err(s, "Path state invalid. state %s\n",
+				 rtrs_srv_state_str(srv_path->state));
+			return -EIO;
+		}
+
+		if (!srv_path->s.con[cid]) {
+			rtrs_err(s, "Conn not set for %d\n", cid);
+			return -EIO;
+		}
 
 		err = post_recv_io(to_srv_con(srv_path->s.con[cid]), q_size);
 		if (err) {




[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