diff mbox series

RDMA/rtrs: server: Ensure 'ib_sge list' is accessible

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

Commit Message

Li Zhijian Dec. 31, 2024, 1:34 a.m. UTC
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(-)

Comments

Leon Romanovsky Dec. 31, 2024, 1:26 p.m. UTC | #1
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 mbox series

Patch

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];