In connect_reply_upcall(), there is an if statement on line 730 to check whether ep->com.cm_id is NULL: if (ep->com.cm_id) When ep->com.cm_id is NULL, it is used on line 736: ep->com.cm_id->rem_ref(ep->com.cm_id); Thus, a possible null-pointer dereference may occur. To fix this bug, ep->com.cm_id is checked before being used. This bug is found by a static analysis tool STCheck written by us. Signed-off-by: Jia-Ju Bai <baijiaju1990@xxxxxxxxx> --- drivers/infiniband/hw/cxgb3/iwch_cm.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/drivers/infiniband/hw/cxgb3/iwch_cm.c b/drivers/infiniband/hw/cxgb3/iwch_cm.c index 0bca72cb4d9a..2b31c4726d3e 100644 --- a/drivers/infiniband/hw/cxgb3/iwch_cm.c +++ b/drivers/infiniband/hw/cxgb3/iwch_cm.c @@ -733,7 +733,8 @@ static void connect_reply_upcall(struct iwch_ep *ep, int status) ep->com.cm_id->event_handler(ep->com.cm_id, &event); } if (status < 0) { - ep->com.cm_id->rem_ref(ep->com.cm_id); + if (ep->com.cm_id) + ep->com.cm_id->rem_ref(ep->com.cm_id); ep->com.cm_id = NULL; ep->com.qp = NULL; } -- 2.17.0