Message ID | 20241231013416.1290920-1-lizhijian@fujitsu.com (mailing list archive) |
---|---|
State | Accepted |
Headers | show |
Series | RDMA/rtrs: server: Ensure 'ib_sge list' is accessible | expand |
On Tue, 31 Dec 2024 09:34:16 +0800, Li Zhijian wrote: > 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 > > [...] Applied, thanks! [1/1] RDMA/rtrs: server: Ensure 'ib_sge list' is accessible https://git.kernel.org/rdma/rdma/c/bc0f6099b7c272 Best regards,
diff --git a/drivers/infiniband/ulp/rtrs/rtrs-srv.c b/drivers/infiniband/ulp/rtrs/rtrs-srv.c index e83d95647852..65b7e669341c 100644 --- a/drivers/infiniband/ulp/rtrs/rtrs-srv.c +++ b/drivers/infiniband/ulp/rtrs/rtrs-srv.c @@ -351,6 +351,7 @@ static int send_io_resp_imm(struct rtrs_srv_con *con, struct rtrs_srv_op *id, enum ib_send_flags flags; u32 imm; int err; + struct ib_sge list; if (id->dir == READ) { struct rtrs_msg_rdma_read *rd_msg = id->rd_msg; @@ -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];
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> --- drivers/infiniband/ulp/rtrs/rtrs-srv.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)