diff mbox series

[3/5] RDMA/siw: Initialize siw_link_ops.list

Message ID 20230727140349.25369-4-guoqing.jiang@linux.dev (mailing list archive)
State Changes Requested
Headers show
Series [1/5] RDMA/siw: Set siw_cm_wq to NULL after it is destroyed | expand

Commit Message

Guoqing Jiang July 27, 2023, 2:03 p.m. UTC
In case siw module can't be inserted successfully, then if remove
the module from kernel, then siw_cm_exit can trigger below trace
because siw_link_ops.list is still NULL since rdma_link_register
is not called. So we need to init the list earlier.

[   45.306864] BUG: kernel NULL pointer dereference, address: 0000000000000008
[   45.306869] #PF: supervisor write access in kernel mode
[   45.306871] #PF: error_code(0x0002) - not-present page
[   45.306872] PGD 0 P4D 0
[   45.306874] Oops: 0002 [#1] PREEMPT SMP NOPTI
[   45.306876] CPU: 1 PID: 1742 Comm: modprobe Tainted: G           OE      6.5.0-rc3+ #16
[   45.306879] Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS rel-1.16.0-0-gd239552c-rebuilt.opensuse.org 04/01/2014
[   45.306880] RIP: 0010:rdma_link_unregister+0x27/0x60 [ib_core]
...
[   45.306916] Call Trace:
[   45.306917]  <TASK>
[   45.306918]  ? show_regs+0x72/0x90
[   45.306922]  ? __die+0x25/0x80
[   45.306924]  ? page_fault_oops+0x154/0x4d0
[   45.306927]  ? __this_cpu_preempt_check+0x13/0x20
[   45.306929]  ? lockdep_unlock+0x63/0xe0
[   45.306933]  ? do_user_addr_fault+0x381/0x8d0
[   45.306934]  ? rcu_is_watching+0x13/0x70
[   45.306937]  ? exc_page_fault+0x87/0x240
[   45.306940]  ? asm_exc_page_fault+0x27/0x30
[   45.306944]  ? rdma_link_unregister+0x27/0x60 [ib_core]
[   45.306956]  ? rdma_link_unregister+0x19/0x60 [ib_core]
[   45.306967]  siw_exit_module+0x87/0x590 [siw]
[   45.306973]  __do_sys_delete_module.constprop.0+0x18f/0x300
[   45.306975]  ? syscall_enter_from_user_mode+0x21/0x70
[   45.306977]  ? __this_cpu_preempt_check+0x13/0x20
[   45.306978]  ? lockdep_hardirqs_on+0x86/0x120
[   45.306980]  __x64_sys_delete_module+0x12/0x20
[   45.306982]  do_syscall_64+0x5c/0x90

Signed-off-by: Guoqing Jiang <guoqing.jiang@linux.dev>
---
 drivers/infiniband/sw/siw/siw_main.c | 1 +
 1 file changed, 1 insertion(+)
diff mbox series

Patch

diff --git a/drivers/infiniband/sw/siw/siw_main.c b/drivers/infiniband/sw/siw/siw_main.c
index b3547253c099..6709ed0de3a4 100644
--- a/drivers/infiniband/sw/siw/siw_main.c
+++ b/drivers/infiniband/sw/siw/siw_main.c
@@ -526,6 +526,7 @@  static int siw_newlink(const char *basedev_name, struct net_device *netdev)
 }
 
 static struct rdma_link_ops siw_link_ops = {
+	.list = LIST_HEAD_INIT(siw_link_ops.list),
 	.type = "siw",
 	.newlink = siw_newlink,
 };