PERFORCE change 89390 for review

Christian S.J. Peron csjp at FreeBSD.org
Sun Jan 8 17:05:02 PST 2006


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

Change 89390 by csjp at csjp_xor on 2006/01/09 01:04:12

	Do not call crget() while holding the NFSD lock. This change moves the
	ucred allocation before we pickup the lock, and adjusts any logic to
	help ensure that we free the ucred in the event we do not need it.

Affected files ...

.. //depot/projects/trustedbsd/mac/sys/nfsserver/nfs_srvsock.c#20 edit

Differences ...

==== //depot/projects/trustedbsd/mac/sys/nfsserver/nfs_srvsock.c#20 (text+ko) ====

@@ -368,7 +368,6 @@
 		 * extensible data in the ucred, and worse.  This wasn't
 		 * fixed before FreeBSD 5.3-RELEASE.
 		 */
-		nd->nd_cr = crget();
 		nd->nd_cr->cr_uid = nd->nd_cr->cr_ruid =
 		    nd->nd_cr->cr_svuid = fxdr_unsigned(uid_t, *tl++);
 		nd->nd_cr->cr_groups[0] = nd->nd_cr->cr_rgid =
@@ -401,6 +400,10 @@
 	} else {
 		nd->nd_repstat = (NFSERR_AUTHERR | AUTH_REJECTCRED);
 		nd->nd_procnum = NFSPROC_NOOP;
+		if (nd->nd_cr != NULL) {
+			crfree(nd->nd_cr);
+			nd->nd_cr = NULL;
+		}
 		return (0);
 	}
 
@@ -714,11 +717,11 @@
 	NFSD_UNLOCK();
 	MALLOC(nd, struct nfsrv_descript *, sizeof (struct nfsrv_descript),
 		M_NFSRVDESC, M_WAITOK);
+	nd->nd_cr = crget();
 	NFSD_LOCK();
 	nd->nd_md = nd->nd_mrep = m;
 	nd->nd_nam2 = nam;
 	nd->nd_dpos = mtod(m, caddr_t);
-	nd->nd_cr = NULL;
 	error = nfs_getreq(nd, nfsd, TRUE);
 	if (error) {
 		if (nam) {


More information about the p4-projects mailing list