Subject: kern/12109: linux emul broken, netscape 4.03 crashes on i386
To: None <gnats-bugs@gnats.netbsd.org>
From: Ross Harvey <ross@ghs.com>
List: netbsd-bugs
Date: 02/01/2001 17:06:17
>Number: 12109
>Category: kern
>Synopsis: linux emul broken, netscape 4.03 crashes on i386
>Confidential: yes
>Severity: serious
>Priority: high
>Responsible: kern-bug-people
>State: open
>Class: sw-bug
>Submitter-Id: net
>Arrival-Date: Thu Feb 01 17:09:00 PST 2001
>Closed-Date:
>Last-Modified:
>Originator: Ross Harvey
>Release: NetBSD-current Thu Feb 1 17:03:13 PST 2001
>Organization:
>Environment:
System: NetBSD sigmet 1.5R NetBSD 1.5R (skb) #16: Thu Feb 1 15:30:55 PST 2001 ross@sigmet:/usr/ross/skb i386
>Description:
Changes made recently adding CHECK_ALT_SYMLINK() break
Netscape 4.03 and presumably other emulated binaries.
I suspect that the recently reported Applixware problems
are the same.
I'm not sure why the CHECK_ALT_SYMLINK() were even made in
the first place. The commit log states that it closes a PR,
however, the PR was opened by the developer that made the
mod and it described a purely hypothetical problem. I suspect
that, in addition to the current problems, the new code will
cause as many problems as it resolves. I bet I could make a
few hypothetical cases that argued for the old way.
Whatever, something needs to change. I suggest just backing
it all out.
>How-To-Repeat:
Run Netscape 4.03 or an Applixware binary on -current.
Contact me if you want to test my exact netscape binary.
>Fix:
Revert the CHECK_ALT_SYMLINK() mods or apply the following
crude patch just to get going:
Index: linux_file.c
===================================================================
RCS file: /cvsroot/syssrc/sys/compat/linux/common/linux_file.c,v
retrieving revision 1.37
diff -u -r1.37 linux_file.c
--- linux_file.c 2001/01/22 21:31:37 1.37
+++ linux_file.c 2001/02/02 00:54:43
@@ -479,6 +479,8 @@
return 0;
}
+int enable_hrh = 0;
+
static int
linux_stat1(p, v, retval, dolstat)
struct proc *p;
@@ -495,7 +497,8 @@
sg = stackgap_init(p->p_emul);
st = stackgap_alloc(&sg, sizeof (struct stat));
- if (dolstat)
+
+ if (enable_hrh && dolstat)
CHECK_ALT_SYMLINK(p, &sg, SCARG(uap, path));
else
CHECK_ALT_EXIST(p, &sg, SCARG(uap, path));
>Release-Note:
>Audit-Trail:
>Unformatted: