@@ -1929,6 +1929,8 @@ retry:
break;
case RDMA_CM_EVENT_CONNECT_REQUEST:
evt->id_priv = (void *) (uintptr_t) resp.uid;
+ if (!evt->id_priv)
+ return ERR(EINVAL); /* kernel bug? */
if (ucma_is_ud_qp(evt->id_priv->id.qp_type))
ucma_copy_ud_event(evt, &resp.param.ud);
else
@@ -1941,6 +1943,8 @@ retry:
case RDMA_CM_EVENT_CONNECT_RESPONSE:
ucma_copy_conn_event(evt, &resp.param.conn);
evt->event.status = ucma_process_conn_resp(evt->id_priv);
+ if (!evt->id_priv)
+ return ERR(EINVAL); /* kernel bug? */
if (!evt->event.status)
evt->event.event = RDMA_CM_EVENT_ESTABLISHED;
else {
@@ -1949,6 +1953,8 @@ retry:
}
break;
case RDMA_CM_EVENT_ESTABLISHED:
+ if (!evt->id_priv)
+ return ERR(EINVAL); /* kernel bug? */
if (ucma_is_ud_qp(evt->id_priv->id.qp_type)) {
ucma_copy_ud_event(evt, &resp.param.ud);
break;
@@ -1957,6 +1963,8 @@ retry:
ucma_copy_conn_event(evt, &resp.param.conn);
break;
case RDMA_CM_EVENT_REJECTED:
+ if (!evt->id_priv)
+ return ERR(EINVAL); /* kernel bug? */
if (evt->id_priv->connect_error) {
ucma_complete_event(evt->id_priv);
goto retry;
@@ -1965,6 +1973,8 @@ retry:
ucma_modify_qp_err(evt->event.id);
break;
case RDMA_CM_EVENT_DISCONNECTED:
+ if (!evt->id_priv)
+ return ERR(EINVAL); /* kernel bug? */
if (evt->id_priv->connect_error) {
ucma_complete_event(evt->id_priv);
goto retry;
@@ -1974,6 +1984,8 @@ retry:
case RDMA_CM_EVENT_MULTICAST_JOIN:
evt->mc = (void *) (uintptr_t) resp.uid;
evt->id_priv = evt->mc->id_priv;
+ if (!evt->id_priv)
+ return ERR(EINVAL); /* kernel bug? */
evt->event.id = &evt->id_priv->id;
ucma_copy_ud_event(evt, &resp.param.ud);
evt->event.param.ud.private_data = evt->mc->context;
@@ -1989,6 +2001,8 @@ retry:
break;
default:
evt->id_priv = (void *) (uintptr_t) resp.uid;
+ if (!evt->id_priv)
+ return ERR(EINVAL); /* kernel bug? */
evt->event.id = &evt->id_priv->id;
evt->event.status = resp.status;
if (ucma_is_ud_qp(evt->id_priv->id.qp_type))