RDMA/rtrs: Ensure 'ib_sge list' is accessible
authorLi Zhijian <lizhijian@fujitsu.com>
Tue, 31 Dec 2024 01:34:16 +0000 (09:34 +0800)
committerLeon Romanovsky <leon@kernel.org>
Tue, 31 Dec 2024 13:28:26 +0000 (08:28 -0500)
Move the declaration of the 'ib_sge list' variable outside the
'always_invalidate' block to ensure it remains accessible for use
throughout the function.

Previously, 'ib_sge list' was declared within the 'always_invalidate'
block, limiting its accessibility, then caused a
'BUG: kernel NULL pointer dereference'[1].
 ? __die_body.cold+0x19/0x27
 ? page_fault_oops+0x15a/0x2d0
 ? search_module_extables+0x19/0x60
 ? search_bpf_extables+0x5f/0x80
 ? exc_page_fault+0x7e/0x180
 ? asm_exc_page_fault+0x26/0x30
 ? memcpy_orig+0xd5/0x140
 rxe_mr_copy+0x1c3/0x200 [rdma_rxe]
 ? rxe_pool_get_index+0x4b/0x80 [rdma_rxe]
 copy_data+0xa5/0x230 [rdma_rxe]
 rxe_requester+0xd9b/0xf70 [rdma_rxe]
 ? finish_task_switch.isra.0+0x99/0x2e0
 rxe_sender+0x13/0x40 [rdma_rxe]
 do_task+0x68/0x1e0 [rdma_rxe]
 process_one_work+0x177/0x330
 worker_thread+0x252/0x390
 ? __pfx_worker_thread+0x10/0x10

This change ensures the variable is available for subsequent operations
that require it.

[1] https://lore.kernel.org/linux-rdma/6a1f3e8f-deb0-49f9-bc69-a9b03ecfcda7@fujitsu.com/

Fixes: 9cb837480424 ("RDMA/rtrs: server: main functionality")
Signed-off-by: Li Zhijian <lizhijian@fujitsu.com>
Link: https://patch.msgid.link/20241231013416.1290920-1-lizhijian@fujitsu.com
Signed-off-by: Leon Romanovsky <leon@kernel.org>
drivers/infiniband/ulp/rtrs/rtrs-srv.c

index e83d956478521d51b04eba1729cf471b6d9796ee..ef4abdea3c2d2e80a3706767f1d9455c3fb06aba 100644 (file)
@@ -349,6 +349,7 @@ static int send_io_resp_imm(struct rtrs_srv_con *con, struct rtrs_srv_op *id,
        struct rtrs_srv_mr *srv_mr;
        bool need_inval = false;
        enum ib_send_flags flags;
+       struct ib_sge list;
        u32 imm;
        int err;
 
@@ -401,7 +402,6 @@ static int send_io_resp_imm(struct rtrs_srv_con *con, struct rtrs_srv_op *id,
        imm = rtrs_to_io_rsp_imm(id->msg_id, errno, need_inval);
        imm_wr.wr.next = NULL;
        if (always_invalidate) {
-               struct ib_sge list;
                struct rtrs_msg_rkey_rsp *msg;
 
                srv_mr = &srv_path->mrs[id->msg_id];
This page took 0.063675 seconds and 4 git commands to generate.