Subject: Re: hard lockups with -current and Netscape
To: KANETA Shin-ichi <kaneta@atmos.cr.chiba-u.ac.jp>
From: Jun-ichiro itojun Hagino <itojun@iijlab.net>
List: current-users
Date: 03/22/2001 07:17:58
>Unfortunately, I got a panic with your patch (and StarOffice5.2). I
>attached kernel stack information below.

	there was a change on March 15, to sys/compat/linux/common/linux_exec.c,
	which we always will see null pointer dereference.  whoever made
	the change, please fix...

	notice that, p->p_emuldata is set to null in linux_e_proc_fork(),
	and linux_e_proc_exec() touches it.

itojun


---
static void
linux_e_proc_exec(p, epp)
	struct proc *p;
	struct exec_package *epp;
{
	if (!p->p_emuldata) {
		/* allocate new Linux emuldata */
		MALLOC(p->p_emuldata, void *, sizeof(struct linux_emuldata),
			M_EMULDATA, M_WAITOK);
	}

	memset(p->p_emuldata, '\0', sizeof(struct linux_emuldata));
	
	/* Set the process idea of the break to the real value */	<- added
	((struct linux_emuldata*)(p->p_emuldata))->p_break = 		<-
	    p->p_vmspace->vm_daddr + ctob(p->p_vmspace->vm_dsize);	<-
}

/*
 * Emulation fork hook.
 */
static void
linux_e_proc_fork(p, parent)
	struct proc *p, *parent;
{
	/*
	 * It could be desirable to copy some stuff from parent's
	 * emuldata. We don't need anything like that for now.
	 * So just allocate new emuldata for the new process.
	 */
	p->p_emuldata = NULL;
	linux_e_proc_exec(p, NULL);
}