i386/82285: kernel panic during reboot

Richard Legault rlegault at SANDVINE.com
Thu Jun 30 21:00:39 GMT 2005


The following reply was made to PR i386/82285; it has been noted by GNATS.

From: "Richard Legault" <rlegault at SANDVINE.com>
To: <bug-followup at FreeBSD.org>,
	"Richard Legault" <rlegault at SANDVINE.com>
Cc:  
Subject: Re: i386/82285: kernel panic during reboot
Date: Thu, 30 Jun 2005 16:57:48 -0400

 I have determined that the p_ucred value has never been set. In other =
 words this proc was in the "process" of being created as
 evidence by p->p_state=3DPRS_NEW.
 
 In the file kern_fork.c (1.234.2.4) I have found a potential race =
 condition.
 In function fork1() at line 410 the process (p2) is added to the allproc =
 list.
 At line 515 p2->p_ucred is set. Thus there are some 40 instructions in =
 which
 a reboot could swap this task out and start unraveling the all proc =
 list.
 I have confirmed on 3 consecutive panics that it was the first proc in =
 the allproc list.
 
 I have moved the setting of the p2->p_ucred =3D crhold(td->td_ucred) to =
 before the addition
 of p2 to the allproc list.=20
 
 Are there other race conditions sitting here that have yet to be =
 uncovered?
 Should other instructions be moved ahead of adding p2 to the proclist?
 I looked at the p_cansignal path and found no other gotchas.
 
 Having applied the fix I have continuously rebooted for 5 hours without =
 a panic at a rate of a 1reboot/3min.
 The previous record was 3 hours without a panic, with most happening =
 within an hour.
 
 
 Richard Legault
 Senior Engineer
 519-880-2400 ext 2722
 www.sandvine.com
 
 


More information about the freebsd-i386 mailing list