[PATCH v3] RDS: IB: Fix null pointer issue
Scenario: 1. Port down and do fail over 2. Ap do rds_bind syscall PID: 47039 TASK: 89887e2fe640 CPU: 47 COMMAND: "kworker/u:6" #0 [898e35f159f0] machine_kexec at 8103abf9 #1 [898e35f15a60] crash_kexec at 810b96e3 #2 [898e35f15b30] oops_end at 8150f518 #3 [898e35f15b60] no_context at 8104854c #4 [898e35f15ba0] __bad_area_nosemaphore at 81048675 #5 [898e35f15bf0] bad_area_nosemaphore at 810487d3 #6 [898e35f15c00] do_page_fault at 815120b8 #7 [898e35f15d10] page_fault at 8150ea95 [exception RIP: unknown or invalid address] RIP: RSP: 898e35f15dc8 RFLAGS: 00010282 RAX: fffe RBX: 889b77f6fc00 RCX:81c99d88 RDX: RSI: 896019ee08e8 RDI:889b77f6fc00 RBP: 898e35f15df0 R8: 896019ee08c8 R9: R10: 0400 R11: R12:896019ee08c0 R13: 889b77f6fe68 R14: 81c99d80 R15: a022a1e0 ORIG_RAX: CS: 0010 SS: 0018 #8 [898e35f15dc8] cma_ndev_work_handler at a022a228 [rdma_cm] #9 [898e35f15df8] process_one_work at 8108a7c6 #10 [898e35f15e58] worker_thread at 8108bda0 #11 [898e35f15ee8] kthread at 81090fe6 PID: 45659 TASK: 880d313d2500 CPU: 31 COMMAND: "oracle_45659_ap" #0 [881024ccfc98] __schedule at 8150bac4 #1 [881024ccfd40] schedule at 8150c2cf #2 [881024ccfd50] __mutex_lock_slowpath at 8150cee7 #3 [881024ccfdc0] mutex_lock at 8150cdeb #4 [881024ccfde0] rdma_destroy_id at a022a027 [rdma_cm] #5 [881024ccfe10] rds_ib_laddr_check at a0357857 [rds_rdma] #6 [881024ccfe50] rds_trans_get_preferred at a0324c2a [rds] #7 [881024ccfe80] rds_bind at a031d690 [rds] #8 [881024ccfeb0] sys_bind at 8142a670 PID: 45659 PID: 47039 rds_ib_laddr_check /* create id_priv with a null event_handler */ rdma_create_id rdma_bind_addr cma_acquire_dev /* add id_priv to cma_dev->id_list */ cma_attach_to_dev cma_ndev_work_handler /* event_hanlder is null */ id_priv->id.event_handler Signed-off-by: Guanglei Li Signed-off-by: Honglei Wang Reviewed-by: Junxiao Bi Reviewed-by: Yanjun Zhu Reviewed-by: Leon Romanovsky Acked-by: Santosh Shilimkar Acked-by: Doug Ledford --- net/rds/ib.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/net/rds/ib.c b/net/rds/ib.c index b2a5067..ff0c980 100644 --- a/net/rds/ib.c +++ b/net/rds/ib.c @@ -345,7 +345,8 @@ static int rds_ib_laddr_check(struct net *net, __be32 addr) /* Create a CMA ID and try to bind it. This catches both * IB and iWARP capable NICs. */ - cm_id = rdma_create_id(&init_net, NULL, NULL, RDMA_PS_TCP, IB_QPT_RC); + cm_id = rdma_create_id(&init_net, rds_rdma_cm_event_handler, + NULL, RDMA_PS_TCP, IB_QPT_RC); if (IS_ERR(cm_id)) return PTR_ERR(cm_id); -- 2.7.4
[PATCH v3] RDS: IB: Fix null pointer issue
Scenario: 1. Port down and do fail over 2. Ap do rds_bind syscall PID: 47039 TASK: 89887e2fe640 CPU: 47 COMMAND: "kworker/u:6" #0 [898e35f159f0] machine_kexec at 8103abf9 #1 [898e35f15a60] crash_kexec at 810b96e3 #2 [898e35f15b30] oops_end at 8150f518 #3 [898e35f15b60] no_context at 8104854c #4 [898e35f15ba0] __bad_area_nosemaphore at 81048675 #5 [898e35f15bf0] bad_area_nosemaphore at 810487d3 #6 [898e35f15c00] do_page_fault at 815120b8 #7 [898e35f15d10] page_fault at 8150ea95 [exception RIP: unknown or invalid address] RIP: RSP: 898e35f15dc8 RFLAGS: 00010282 RAX: fffe RBX: 889b77f6fc00 RCX:81c99d88 RDX: RSI: 896019ee08e8 RDI:889b77f6fc00 RBP: 898e35f15df0 R8: 896019ee08c8 R9: R10: 0400 R11: R12:896019ee08c0 R13: 889b77f6fe68 R14: 81c99d80 R15: a022a1e0 ORIG_RAX: CS: 0010 SS: 0018 #8 [898e35f15dc8] cma_ndev_work_handler at a022a228 [rdma_cm] #9 [898e35f15df8] process_one_work at 8108a7c6 #10 [898e35f15e58] worker_thread at 8108bda0 #11 [898e35f15ee8] kthread at 81090fe6 PID: 45659 TASK: 880d313d2500 CPU: 31 COMMAND: "oracle_45659_ap" #0 [881024ccfc98] __schedule at 8150bac4 #1 [881024ccfd40] schedule at 8150c2cf #2 [881024ccfd50] __mutex_lock_slowpath at 8150cee7 #3 [881024ccfdc0] mutex_lock at 8150cdeb #4 [881024ccfde0] rdma_destroy_id at a022a027 [rdma_cm] #5 [881024ccfe10] rds_ib_laddr_check at a0357857 [rds_rdma] #6 [881024ccfe50] rds_trans_get_preferred at a0324c2a [rds] #7 [881024ccfe80] rds_bind at a031d690 [rds] #8 [881024ccfeb0] sys_bind at 8142a670 PID: 45659 PID: 47039 rds_ib_laddr_check /* create id_priv with a null event_handler */ rdma_create_id rdma_bind_addr cma_acquire_dev /* add id_priv to cma_dev->id_list */ cma_attach_to_dev cma_ndev_work_handler /* event_hanlder is null */ id_priv->id.event_handler Signed-off-by: Guanglei Li Signed-off-by: Honglei Wang Reviewed-by: Junxiao Bi Reviewed-by: Yanjun Zhu Reviewed-by: Leon Romanovsky Acked-by: Santosh Shilimkar --- net/rds/ib.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/net/rds/ib.c b/net/rds/ib.c index b2a5067..ff0c980 100644 --- a/net/rds/ib.c +++ b/net/rds/ib.c @@ -345,7 +345,8 @@ static int rds_ib_laddr_check(struct net *net, __be32 addr) /* Create a CMA ID and try to bind it. This catches both * IB and iWARP capable NICs. */ - cm_id = rdma_create_id(&init_net, NULL, NULL, RDMA_PS_TCP, IB_QPT_RC); + cm_id = rdma_create_id(&init_net, rds_rdma_cm_event_handler, + NULL, RDMA_PS_TCP, IB_QPT_RC); if (IS_ERR(cm_id)) return PTR_ERR(cm_id); -- 2.7.4