svn commit: r300888 - head/sys/dev/cxgbe/iw_cxgbe

Navdeep Parhar np at FreeBSD.org
Fri May 27 23:44:35 UTC 2016


Author: np
Date: Fri May 27 23:44:33 2016
New Revision: 300888
URL: https://svnweb.freebsd.org/changeset/base/300888

Log:
  iw_cxgbe: Plug a lock leak in process_mpa_request().
  
  If the parent is DEAD or connect_request_upcall() fails, the parent
  mutex is left locked.  This leads to a hang when process_mpa_request()
  is called again for another child of the listening endpoint.
  
  Submitted by:	Krishnamraju Eraparaju @ Chelsio
  Obtained from:	upstream iw_cxgb4
  Sponsored by:	Chelsio Communications

Modified:
  head/sys/dev/cxgbe/iw_cxgbe/cm.c

Modified: head/sys/dev/cxgbe/iw_cxgbe/cm.c
==============================================================================
--- head/sys/dev/cxgbe/iw_cxgbe/cm.c	Fri May 27 23:15:58 2016	(r300887)
+++ head/sys/dev/cxgbe/iw_cxgbe/cm.c	Fri May 27 23:44:33 2016	(r300888)
@@ -1861,14 +1861,16 @@ process_mpa_request(struct c4iw_ep *ep)
 	/* drive upcall */
 	mutex_lock(&ep->parent_ep->com.mutex);
 	if (ep->parent_ep->com.state != DEAD) {
-		if(connect_request_upcall(ep))
-			goto err_out;
-	}else {
-		goto err_out;
-	}
+		if (connect_request_upcall(ep))
+			goto err_unlock_parent;
+	} else
+		goto err_unlock_parent;
 	mutex_unlock(&ep->parent_ep->com.mutex);
 	return 0;
 
+err_unlock_parent:
+	mutex_unlock(&ep->parent_ep->com.mutex);
+	goto err_out;
 err_stop_timer:
 	STOP_EP_TIMER(ep);
 err_out:


More information about the svn-src-head mailing list