RDMA/rtrs-srv: Avoid null pointer deref during path establishment
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@ionos.com> Signed-off-by: Jack Wang <jinpu.wang@ionos.com> Signed-off-by: Grzegorz Prajsner <grzegorz.prajsner@ionos.com> Link: https://patch.msgid.link/20240821112217.41827-9-haris.iqbal@ionos.com Signed-off-by: Leon Romanovsky <leon@kernel.org>
This commit is contained in:
committed by
Leon Romanovsky
parent
ff73958905
commit
d0e62bf7b5
@@ -935,12 +935,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)
|
||||
@@ -991,6 +990,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) {
|
||||
|
||||
Reference in New Issue
Block a user