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

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


From: Matthew Dillon <dillon@xxxxxxxxxxxxxxxxxxxx>
Date: Sun, 21 Oct 2007 09:32:00 -0700 (PDT)

:It looks like p_sigsagts == NULL.  Presumably, p_sigsagts could be tested for
:NULL in fill_kinfo_proc() (as p_pgrp).
:
:However, the problem may be higher up in the call stack.  sysctl_kern_proc()
:contains two calls to sysctl_out_proc().  One is protected by PHOLD/PRELE, the
:other isn't.  I reckon both calls should be protected to delay reaping until
:sysctl() processing completes.
:
:The following patch is UNTESTED as I don't know how to reproduce the original
:problem.

    Yes, you are correct, both should be protected and your patch looks
    correct.

    However, even though both should be protected this particular bit of
    code is for special kernel processes, and special kernel processes
    typically do not exit so I do not think it can be the cause.  It needs
    to be fixed anyway, though!  I will commit your patch as soon as I
    test it a little.

					-Matt
					Matthew Dillon 
					<dillon@backplane.com>

:Index: kern_proc.c
:===================================================================
:RCS file: /home/dcvs/src/sys/kern/kern_proc.c,v
:retrieving revision 1.39
:diff -u -5 -r1.39 kern_proc.c
:--- kern_proc.c	12 Aug 2007 16:32:13 -0000	1.39
:+++ kern_proc.c	21 Oct 2007 10:34:28 -0000
:@@ -714,11 +714,13 @@
: 		p = pfind((pid_t)name[0]);
: 		if (!p)
: 			return (0);
: 		if (!PRISON_CHECK(cr1, p->p_ucred))
: 			return (0);
:+		PHOLD(p);
: 		error = sysctl_out_proc(p, req, flags);
:+		PRELE(p);
: 		return (error);
: 	}
:
: 	if (!req->oldptr) {
: 		/* overestimate by 5 procs */
:




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