RDMA/bnxt_re: Fix incorrect dereference of srq in async event
authorKashyap Desai <kashyap.desai@broadcom.com>
Tue, 8 Oct 2024 07:41:35 +0000 (00:41 -0700)
committerJason Gunthorpe <jgg@nvidia.com>
Fri, 11 Oct 2024 23:49:01 +0000 (20:49 -0300)
Currently driver is not getting correct srq. Dereference only if qplib has
a valid srq.

Fixes: b02fd3f79ec3 ("RDMA/bnxt_re: Report async events and errors")
Link: https://patch.msgid.link/r/1728373302-19530-4-git-send-email-selvin.xavier@broadcom.com
Reviewed-by: Saravanan Vajravel <saravanan.vajravel@broadcom.com>
Reviewed-by: Chandramohan Akula <chandramohan.akula@broadcom.com>
Signed-off-by: Kashyap Desai <kashyap.desai@broadcom.com>
Signed-off-by: Selvin Xavier <selvin.xavier@broadcom.com>
Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
drivers/infiniband/hw/bnxt_re/main.c

index 686e405..dd39948 100644 (file)
@@ -1028,12 +1028,15 @@ static int bnxt_re_handle_unaffi_async_event(struct creq_func_event
 static int bnxt_re_handle_qp_async_event(struct creq_qp_event *qp_event,
                                         struct bnxt_re_qp *qp)
 {
-       struct bnxt_re_srq *srq = container_of(qp->qplib_qp.srq, struct bnxt_re_srq,
-                                              qplib_srq);
        struct creq_qp_error_notification *err_event;
+       struct bnxt_re_srq *srq = NULL;
        struct ib_event event = {};
        unsigned int flags;
 
+       if (qp->qplib_qp.srq)
+               srq =  container_of(qp->qplib_qp.srq, struct bnxt_re_srq,
+                                   qplib_srq);
+
        if (qp->qplib_qp.state == CMDQ_MODIFY_QP_NEW_STATE_ERR &&
            rdma_is_kernel_res(&qp->ib_qp.res)) {
                flags = bnxt_re_lock_cqs(qp);