From owner-freebsd-bugs@FreeBSD.ORG Tue May 13 18:20:17 2003 Return-Path: Delivered-To: freebsd-bugs@hub.freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 95D0937B401 for ; Tue, 13 May 2003 18:20:17 -0700 (PDT) Received: from freefall.freebsd.org (freefall.freebsd.org [216.136.204.21]) by mx1.FreeBSD.org (Postfix) with ESMTP id 1E6E643FD7 for ; Tue, 13 May 2003 18:20:17 -0700 (PDT) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (gnats@localhost [127.0.0.1]) by freefall.freebsd.org (8.12.9/8.12.9) with ESMTP id h4E1KGUp062841 for ; Tue, 13 May 2003 18:20:16 -0700 (PDT) (envelope-from gnats@freefall.freebsd.org) Received: (from gnats@localhost) by freefall.freebsd.org (8.12.9/8.12.9/Submit) id h4E1KGFk062831; Tue, 13 May 2003 18:20:16 -0700 (PDT) Date: Tue, 13 May 2003 18:20:16 -0700 (PDT) Message-Id: <200305140120.h4E1KGFk062831@freefall.freebsd.org> To: freebsd-bugs@FreeBSD.org From: Thomas Moestl Subject: Re: kern/52198: Kernel trap 12 when debugging fork() with ald [/usr/ports/devel/ald] X-BeenThere: freebsd-bugs@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list Reply-To: Thomas Moestl List-Id: Bug reports List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 14 May 2003 01:20:18 -0000 The following reply was made to PR kern/52198; it has been noted by GNATS. From: Thomas Moestl To: Lolownia Cc: FreeBSD-gnats-submit@freebsd.org Subject: Re: kern/52198: Kernel trap 12 when debugging fork() with ald [/usr/ports/devel/ald] Date: Wed, 14 May 2003 03:19:24 +0200 On Wed, 2003/05/14 at 00:36:36 +0200, Lolownia wrote: > > >Number: 52198 > >Category: kern > >Synopsis: Kernel trap 12 when debugging fork() with ald [/usr/ports/devel/ald] > [...] > When stepping through simple assembler program with fork() syscall, > system drops into DDB > db> trace > sw1b(2f,2f,2f,bfbff64c,bfbff654) at sw1b+0xa9 > fork_trampoline() at fork_trampoline > --- trap 0xa, eip = 0x804849c, esp = 0xbfbff628, ebp = 0xbfbff644 --- This is a bug in cpu_fork(); it bogusly bases the kernel eflags to be set for a new process on the user eflags of the forking process (since a commit which seems to originally have been intended to clear PSL_I, about a year ago). The patch below should fix this; it will just use a sane initial value, since cloning the forking process' kernel eflags (as was done before the commit mentioned above) does not really make sense either. This will also avoid possible problems due to proc0's pcb_psl being unitialized. - Thomas -- Thomas Moestl http://www.tu-bs.de/~y0015675/ http://people.FreeBSD.org/~tmm/ PGP fingerprint: 1C97 A604 2BD0 E492 51D0 9C0F 1FE6 4F1D 419C 776C Index: vm_machdep.c =================================================================== RCS file: /d/ncvs/src/sys/i386/i386/vm_machdep.c,v retrieving revision 1.206 diff -u -r1.206 vm_machdep.c --- vm_machdep.c 21 Apr 2003 15:05:05 -0000 1.206 +++ vm_machdep.c 14 May 2003 00:47:49 -0000 @@ -181,7 +181,7 @@ pcb2->pcb_esp = (int)td2->td_frame - sizeof(void *); pcb2->pcb_ebx = (int)td2; /* fork_trampoline argument */ pcb2->pcb_eip = (int)fork_trampoline; - pcb2->pcb_psl = td2->td_frame->tf_eflags & ~PSL_I; /* ints disabled */ + pcb2->pcb_psl = PSL_KERNEL; /* ints disabled */ pcb2->pcb_gs = rgs(); /*- * pcb2->pcb_dr*: cloned above.