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