]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
net: rds: clear i_sends on setup unwind
authorYuqi Xu <xuyq21@lenovo.com>
Fri, 29 May 2026 13:01:44 +0000 (21:01 +0800)
committerJakub Kicinski <kuba@kernel.org>
Tue, 2 Jun 2026 20:31:27 +0000 (13:31 -0700)
The RDS IB connection teardown path is written so it can run during
partial startup and on repeated shutdown attempts. It uses NULL
pointers to distinguish resources that are still owned from resources
that have already been released.

When rds_ib_setup_qp() fails after allocating i_sends but before
allocating i_recvs, the sends_out path frees i_sends without clearing
the pointer. A later shutdown pass can still treat that stale pointer
as a live send ring allocation.

Clear i_sends after vfree() in the error unwind path so the existing
shutdown logic continues to use the correct ownership state.

Fixes: 3b12f73a5c29 ("rds: ib: add error handle")
Cc: stable@kernel.org
Reported-by: Yuan Tan <yuantan098@gmail.com>
Reported-by: Zhengchuan Liang <zcliangcn@gmail.com>
Reported-by: Xin Liu <bird@lzu.edu.cn>
Signed-off-by: Yuqi Xu <xuyq21@lenovo.com>
Signed-off-by: Ren Wei <n05ec@lzu.edu.cn>
Reviewed-by: Allison Henderson <achender@kernel.org>
Link: https://patch.msgid.link/5a0f7624bb9845a7b67d26166a150b59e7f394ce.1779632468.git.xuyq21@lenovo.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
net/rds/ib_cm.c

index 0c64c504f79db5dfb72d719a04464093d614cefd..4001de0c495938194282572287d84d2c385fbaa7 100644 (file)
@@ -656,6 +656,7 @@ static int rds_ib_setup_qp(struct rds_connection *conn)
 
 sends_out:
        vfree(ic->i_sends);
+       ic->i_sends = NULL;
 
 ack_dma_out:
        rds_dma_hdr_free(rds_ibdev->dev, ic->i_ack, ic->i_ack_dma,