Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 03 Jul 1999 22:27:41 +0200
From:      Peter Holm <peter@holm.cc>
To:        freebsd-current@FreeBSD.org
Subject:   12 trap in rfork+0x22
Message-ID:  <377E723D.19674A38@holm.cc>

next in thread | raw e-mail | index | archive | help
This is a multi-part message in MIME format.
--------------C6DB7A8D1433429B6317E010
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit

I don't know is this is of any interest, but a rfork(0) will cause a
fault. I have included a patch.

fault code  = supervisor read, page not present
instruction pointer = 0x8:0xc015ff46
stack pointer         = 0x10:0xc6894f38
frame pointer         = 0x10:0xc6894f4c
code segment  = base 0x0, limit 0xfffff, type 0x1b
   = DPL 0, pres 1, def32 1, gran 1
processor eflags = interrupt enabled, resume, IOPL = 0
current process  = 94200 (syscall)
interrupt mask  =
kernel: type 12 trap, code=0
Stopped at      rfork+0x22:     movl    0x30(%eax),%eax
db> p %eax
c015ff46 <--- why this?  eax == 0x8 in show reg
db> trace
rfork(c680a100,c6894f80,2,bfbfdc24,bfbfdc30) at rfork+0x22
syscall(2f,2f,2f,bfbfdc30,bfbfdc24) at syscall+0x182
Xint0x80_syscall() at Xint0x80_syscall+0x30
db> show reg
cs                 0x8
ds                0x10
es                0x10
fs                0x10
ss                0x10
eax                0x8
ecx         0x7d8aa8c3
edx                  0
ebx         0xc680a100
esp         0xc6894f38
ebp         0xc6894f4c
esi         0xc02f9a3c  sysent+0x7d8
edi                  0
eip         0xc015ff46  rfork+0x22
efl            0x10246
rfork+0x22:     movl    0x30(%eax),%eax
db>
--
Peter Holm | mailto:peter@holm.cc | http://login.dknet.dk/~pho/
  -[ Member of the BSD-Dk User Group / http://www.bsd-dk.dk/ ] -


--------------C6DB7A8D1433429B6317E010
Content-Type: text/plain; charset=us-ascii;
 name="diff"
Content-Transfer-Encoding: 7bit
Content-Disposition: inline;
 filename="diff"

*** src/sys/kern/kern_fork.c~	Sat Jul  3 21:15:58 1999
--- src/sys/kern/kern_fork.c	Sat Jul  3 21:54:18 1999
***************
*** 130,136 ****
  
  	error = fork1(p, uap->flags, &p2);
  	if (error == 0) {
! 		p->p_retval[0] = p2->p_pid;
  		p->p_retval[1] = 0;
  	}
  	return error;
--- 130,139 ----
  
  	error = fork1(p, uap->flags, &p2);
  	if (error == 0) {
! 		if (p2 == NULL)
! 			p->p_retval[0] = 0;
! 		else
! 			p->p_retval[0] = p2->p_pid;
  		p->p_retval[1] = 0;
  	}
  	return error;
***************
*** 196,201 ****
--- 199,205 ----
  				p1->p_fd = newfd;
  			}
  		}
+ 		*procp = NULL;
  		return (0);
  	}
  

--------------C6DB7A8D1433429B6317E010--



To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-current" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?377E723D.19674A38>