PERFORCE change 43832 for review

Sam Leffler sam at FreeBSD.org
Thu Dec 11 15:21:59 PST 2003


http://perforce.freebsd.org/chv.cgi?CH=43832

Change 43832 by sam at sam_ebb on 2003/12/11 15:21:22

	drop locks before calling sonewconn to avoid recursion on
	the unpcb head lock and to avoid holding locks over malloc

Affected files ...

.. //depot/projects/netperf+sockets/sys/kern/uipc_usrreq.c#5 edit

Differences ...

==== //depot/projects/netperf+sockets/sys/kern/uipc_usrreq.c#5 (text+ko) ====

@@ -839,8 +839,19 @@
 		goto bad;
 	}
 	if (so->so_proto->pr_flags & PR_CONNREQUIRED) {
-		if ((so2->so_options & SO_ACCEPTCONN) == 0 ||
-		    (so3 = sonewconn(so2, 0)) == 0) {
+		if (so2->so_options & SO_ACCEPTCONN) {
+			/*
+			 * NB: drop locks here so unp_attach is entered
+			 *     w/o locks; this avoids a recursive lock
+			 *     of the head and holding sleep locks across
+			 *     a (potentially) blocking malloc.
+			 */
+			UNP_EXIT(unp);
+			so3 = sonewconn(so2, 0);
+			UNP_ENTER(unp);
+		} else
+			so3 = 0;
+		if (so3 == 0) {
 			error = ECONNREFUSED;
 			goto bad;
 		}


More information about the p4-projects mailing list