Date: Wed, 19 Jun 2002 10:23:52 -0700 From: Alfred Perlstein <bright@mu.org> To: Don Lewis <dl-freebsd@catspoiler.org> Cc: jhb@freebsd.org, hackers@freebsd.org Subject: Re: Suggested fixes for uidinfo "would sleep" messages Message-ID: <20020619172352.GH85935@elvis.mu.org> In-Reply-To: <20020619172107.GF85935@elvis.mu.org> References: <20020619061332.GA85935@elvis.mu.org> <200206190810.g5J8AKM1065115@gw.catspoiler.org> <20020619172107.GF85935@elvis.mu.org>
next in thread | previous in thread | raw e-mail | index | archive | help
* Alfred Perlstein <bright@mu.org> [020619 10:22] wrote: > re execve() issues... > > * Don Lewis <dl-freebsd@catspoiler.org> [020619 01:10] wrote: > > On 18 Jun, Alfred Perlstein wrote: > > > Thanks a ton for taking care of it, your patch is actually cleaner > > > than what I had started on, I'll be committing it shortly. > > > > While you're working in this area, take a look at execve(). If the > > fdcheckstd() test fails, we leak ucred and uidinfo structures, and also > > leave the proc locked. The fix is pretty straightforward. > > I'm a bit confused actually, it looks like just unlocking the proc > and then moving the 'exec_fail_dealloc' label higher would fix it, > except I'm not sure about the: > > /* > * Handle deferred decrement of ref counts. > */ > if (textvp != NULL) > vrele(textvp); > #ifdef KTRACE > if (tracevp != NULL) > vrele(tracevp); > #endif > pargs_drop(oldargs); > > part... should that be before or after exec_fail_dealloc? > > Any ideas? This is what I have so far, I'll look at it more, but I'm a bit cafinated and irritated (at other things) at the current moment. :) Index: kern_exec.c =================================================================== RCS file: /home/ncvs/src/sys/kern/kern_exec.c,v retrieving revision 1.165 diff -u -r1.165 kern_exec.c --- kern_exec.c 19 Jun 2002 06:39:24 -0000 1.165 +++ kern_exec.c 19 Jun 2002 17:18:32 -0000 @@ -385,8 +385,10 @@ #endif /* Make sure file descriptors 0..2 are in use. */ error = fdcheckstd(td); - if (error != 0) + if (error != 0) { + PROC_UNLOCK(p); goto exec_fail_dealloc; + } /* * Set the new credentials. */ @@ -471,6 +473,8 @@ } PROC_UNLOCK(p); +exec_fail_dealloc: + /* * Free any resources malloc'd earlier that we didn't use. */ @@ -490,8 +494,6 @@ vrele(tracevp); #endif pargs_drop(oldargs); - -exec_fail_dealloc: /* * free various allocated resources 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?20020619172352.GH85935>