kern/84935: [PATCH] Panic in kern_exec.c: missing lock
Don Lewis
truckman at FreeBSD.org
Sat Oct 1 01:38:40 PDT 2005
Synopsis: [PATCH] Panic in kern_exec.c: missing lock
State-Changed-From-To: open->patched
State-Changed-By: truckman
State-Changed-When: Sat Oct 1 08:34:48 GMT 2005
State-Changed-Why:
The following patch committed in src/sys/kern/kern_exec.c 1.276:
Index: kern_exec.c
===================================================================
RCS file: /home/ncvs/src/sys/kern/kern_exec.c,v
retrieving revision 1.275
diff -u -r1.275 kern_exec.c
--- kern_exec.c 30 Jun 2005 19:01:26 -0000 1.275
+++ kern_exec.c 1 Oct 2005 06:19:48 -0000
@@ -479,8 +479,11 @@
newcred = crget();
euip = uifind(attr.va_uid);
i = imgp->args->begin_envv - imgp->args->begin_argv;
- if (ps_arg_cache_limit >= i + sizeof(struct pargs))
+ /* Cache arguments if they fit inside our allowance */
+ if (ps_arg_cache_limit >= i + sizeof(struct pargs)) {
newargs = pargs_alloc(i);
+ bcopy(imgp->args->begin_argv, newargs->ar_args, i);
+ }
/* close files on exec */
fdcloseexec(td);
@@ -661,16 +664,13 @@
/* clear "fork but no exec" flag, as we _are_ execing */
p->p_acflag &= ~AFORK;
- /* Free any previous argument cache */
+ /*
+ * Free any previous argument cache and it with
+ * the new argument cache, if any.
+ */
oldargs = p->p_args;
- p->p_args = NULL;
-
- /* Cache arguments if they fit inside our allowance */
- if (ps_arg_cache_limit >= i + sizeof(struct pargs)) {
- bcopy(imgp->args->begin_argv, newargs->ar_args, i);
- p->p_args = newargs;
- newargs = NULL;
- }
+ p->p_args = newargs;
+ newargs = NULL;
#ifdef HWPMC_HOOKS
/*
This version of the patch has one less PROC_LOCK()/PROC_UNLOCK() pair
and simplifies the p->p_args update logic.
Responsible-Changed-From-To: freebsd-bugs->truckman
Responsible-Changed-By: truckman
Responsible-Changed-When: Sat Oct 1 08:34:48 GMT 2005
Responsible-Changed-Why:
Changed responsible party to patch committer.
http://www.freebsd.org/cgi/query-pr.cgi?pr=84935
More information about the freebsd-bugs
mailing list