DragonFly bugs List (threaded) for 2008-01
DragonFly BSD
DragonFly bugs List (threaded) for 2008-01
[Date Prev][Date Next]  [Thread Prev][Thread Next]  [Date Index][Thread Index]

Re: kernel panic on HEAD from Oct. 4th sources


From: "Simon 'corecode' Schubert" <corecode@xxxxxxxxxxxx>
Date: Tue, 08 Jan 2008 01:21:34 +0100

Matthew Dillon wrote:
:Just got this, and it appears similar to the previous one:
:
:dumping to dev #da/0x20001, blockno 378927
:
:(kgdb) bt
:#7  0xc019b833 in fill_kinfo_proc (p=3D0xe8bd1ee0, kp=3D0xe926c628) at /usr=
:/src/sys/kern/kern_kinfo.c:97
:..
:
:This happened with the system doing some serious paging.  Sources are
:=66rom Dec. 6th.  kernel and vmcore available on leaf:~pavalos/crash/9/.
:
:--Peter

I'll get it fixed. More issues trying to get info on zombied processes which are in a state of being torn down.

In this case p->p_ucred is NULL.

     I'll do a run through of the procedure and fix this any other
     potential NULL dereferences that I see.

I think we should simply prevent these almost reaped processes from staying in the zombie list. I suggest the attached fix (not yet tested).


cheers
  simon

Index: kern/kern_exit.c
===================================================================
RCS file: /home/repos/cvs/dragonfly/src/sys/kern/kern_exit.c,v
retrieving revision 1.86
diff -u -p -r1.86 kern_exit.c
--- kern/kern_exit.c	30 Aug 2007 20:41:00 -0000	1.86
+++ kern/kern_exit.c	8 Jan 2008 00:06:01 -0000
@@ -769,6 +769,13 @@ loop:
 			p->p_usched->heuristic_exiting(td->td_lwp, deadlp);
 			*/
 
+			/*
+			 * Finally finished with old proc entry.
+			 * Unlink it from its process group and free it.
+			 */
+			proc_remove_zombie(p);
+			leavepgrp(p);
+
 			/* Take care of our return values. */
 			*res = p->p_pid;
 			if (status)
@@ -806,13 +813,6 @@ loop:
 			if (p->p_args && --p->p_args->ar_ref == 0)
 				FREE(p->p_args, M_PARGS);
 
-			/*
-			 * Finally finished with old proc entry.
-			 * Unlink it from its process group and free it.
-			 */
-			proc_remove_zombie(p);
-			leavepgrp(p);
-
 			if (--p->p_sigacts->ps_refcnt == 0) {
 				kfree(p->p_sigacts, M_SUBPROC);
 				p->p_sigacts = NULL;


[Date Prev][Date Next]  [Thread Prev][Thread Next]  [Date Index][Thread Index]