Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 19 Jun 2002 19:18:46 -0700
From:      Mike Makonnen <makonnen@pacbell.net>
To:        Don Lewis <dl-freebsd@catspoiler.org>
Cc:        bright@mu.org, jhb@FreeBSD.ORG, hackers@FreeBSD.ORG
Subject:   Re: Suggested fixes for uidinfo "would sleep" messages
Message-ID:  <20020619191846.4aa74dd6.makonnen@pacbell.net>
In-Reply-To: <200206192256.g5JMuCM1067585@gw.catspoiler.org>
References:  <20020619172107.GF85935@elvis.mu.org> <200206192256.g5JMuCM1067585@gw.catspoiler.org>

next in thread | previous in thread | raw e-mail | index | archive | help
I actually submitted a patch for this a few days ago to John Baldwin, but
I think he's busy right now 'cause I haven't heard from him. Here it
is:

Index: sys/kern/kern_exec.c
===================================================================
RCS file: /home/ncvs/src/sys/kern/kern_exec.c,v
retrieving revision 1.164
diff -u -r1.164 kern_exec.c
--- sys/kern/kern_exec.c	7 Jun 2002 05:41:27 -0000	1.164
+++ sys/kern/kern_exec.c	16 Jun 2002 14:14:37 -0000
@@ -133,7 +133,7 @@
 	struct image_params image_params, *imgp;
 	struct vattr attr;
 	int (*img_first)(struct image_params *);
-	struct pargs *oldargs, *newargs = NULL;
+	struct pargs *oldargs=NULL, *newargs = NULL;
 	struct procsig *oldprocsig, *newprocsig;
 #ifdef KTRACE
 	struct vnode *tracevp = NULL;
@@ -383,8 +383,10 @@
 #endif
 		/* Make sure file descriptors 0..2 are in use.  */
 		error = fdcheckstd(td);
-		if (error != 0)
-			goto exec_fail_dealloc;
+		if (error != 0) {
+			oldcred = NULL;
+			goto done1;
+		}
 		/*
 		 * Set the new credentials.
 		 */
@@ -467,6 +469,7 @@
 		p->p_args = newargs;
 		newargs = NULL;
 	}
+done1:
 	PROC_UNLOCK(p);
 
 	/*
@@ -476,7 +479,6 @@
 		crfree(oldcred);
 	else
 		crfree(newcred);
-	KASSERT(newargs == NULL, ("leaking p_args"));
 	/*
 	 * Handle deferred decrement of ref counts.
 	 */
@@ -486,7 +488,10 @@
 	if (tracevp != NULL)
 		vrele(tracevp);
 #endif
-	pargs_drop(oldargs);
+	if (oldargs != NULL)
+		pargs_drop(oldargs);
+	if (newargs != NULL)
+		pargs_drop(newargs);
 
 exec_fail_dealloc:
 
Cheers,
Mike.

To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-hackers" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20020619191846.4aa74dd6.makonnen>