• Steve Wise's avatar
    IB/core: correctly handle rdma_rw_init_mrs() failure · b6bc1c73
    Steve Wise authored
    Function ib_create_qp() was failing to return an error when
    rdma_rw_init_mrs() fails, causing a crash further down in ib_create_qp()
    when trying to dereferece the qp pointer which was actually a negative
    errno.
    
    The crash:
    
    crash> log|grep BUG
    [  136.458121] BUG: unable to handle kernel NULL pointer dereference at 0000000000000098
    crash> bt
    PID: 3736   TASK: ffff8808543215c0  CPU: 2   COMMAND: "kworker/u64:2"
     #0 [ffff88084d323340] machine_kexec at ffffffff8105fbb0
     #1 [ffff88084d3233b0] __crash_kexec at ffffffff81116758
     #2 [ffff88084d323480] crash_kexec at ffffffff8111682d
     #3 [ffff88084d3234b0] oops_end at ffffffff81032bd6
     #4 [ffff88084d3234e0] no_context at ffffffff8106e431
     #5 [ffff88084d323530] __bad_area_nosemaphore at ffffffff8106e610
     #6 [ffff88084d323590] bad_area_nosemaphore at ffffffff8106e6f4
     #7 [ffff88084d3235a0] __do_page_fault at ffffffff8106ebdc
     #8 [ffff88084d323620] do_page_fault at ffffffff8106f057
     #9 [ffff88084d323660] page_fault at ffffffff816e3148
        [exception RIP: ib_create_qp+427]
        RIP: ffffffffa02554fb  RSP: ffff88084d323718  RFLAGS: 00010246
        RAX: 0000000000000004  RBX: fffffffffffffff4  RCX: 000000018020001f
        RDX: ffff880830997fc0  RSI: 0000000000000001  RDI: ffff88085f407200
        RBP: ffff88084d323778   R8: 0000000000000001   R9: ffffea0020bae210
        R10: ffffea0020bae218  R11: 0000000000000001  R12: ffff88084d3237c8
        R13: 00000000fffffff4  R14: ffff880859fa5000  R15: ffff88082eb89800
        ORIG_RAX: ffffffffffffffff  CS: 0010  SS: 0018
    #10 [ffff88084d323780] rdma_create_qp at ffffffffa0782681 [rdma_cm]
    #11 [ffff88084d3237b0] nvmet_rdma_create_queue_ib at ffffffffa07c43f3 [nvmet_rdma]
    #12 [ffff88084d323860] nvmet_rdma_alloc_queue at ffffffffa07c5ba9 [nvmet_rdma]
    #13 [ffff88084d323900] nvmet_rdma_queue_connect at ffffffffa07c5c96 [nvmet_rdma]
    #14 [ffff88084d323980] nvmet_rdma_cm_handler at ffffffffa07c6450 [nvmet_rdma]
    #15 [ffff88084d3239b0] iw_conn_req_handler at ffffffffa0787480 [rdma_cm]
    #16 [ffff88084d323a60] cm_conn_req_handler at ffffffffa0775f06 [iw_cm]
    #17 [ffff88084d323ab0] process_event at ffffffffa0776019 [iw_cm]
    #18 [ffff88084d323af0] cm_work_handler at ffffffffa0776170 [iw_cm]
    #19 [ffff88084d323cb0] process_one_work at ffffffff810a1483
    #20 [ffff88084d323d90] worker_thread at ffffffff810a211d
    #21 [ffff88084d323ec0] kthread at ffffffff810a6c5c
    #22 [ffff88084d323f50] ret_from_fork at ffffffff816e1ebf
    
    Fixes: 632bc3f6 ("IB/core, RDMA RW API: Do not exceed QP SGE send limit")
    Signed-off-by: default avatarSteve Wise <swise@opengridcomputing.com>
    Cc: stable@vger.kernel.org
    Reviewed-by: default avatarBart Van Assche <bart.vanassche@sandisk.com>
    Signed-off-by: default avatarDoug Ledford <dledford@redhat.com>
    b6bc1c73
verbs.c 53.1 KB