[SunHELP] vi crashes
Alan Rubin
rubin at frell.org
Fri Jan 11 19:46:38 CST 2002
This is a Sol 7 box in Chicago. i am in Australia.
the TERM is set to vt100.
alan
On Fri, 11 Jan 2002, Nicholas Dronen wrote:
> On Fri, Jan 11, 2002 at 07:59:15AM -0600, Alan Rubin wrote:
> > can anyone decipher this for me? maybe there is a permission error?
>
> Sure, but truss won't show you where exactly in the process
> it's getting the signal. If you have Solaris 8, you can use
> the -u flag, which shows the symbols and arguments of shared
> library *function* calls, not just kernel-trap system calls.
>
> Something like:
>
> $ truss -o [ output file ] -u'*libc*' [ program ]
>
> There's a more proper way to use -u, but I don't
> have a Sun machine at home and I'm too lazy to
> check http://docs.sun.com/. :-)
>
> > open("/export/home/rubin/.exrc", O_RDONLY) Err#2 ENOENT
> > sigaction(SIGINT, 0xEFFFF210, 0xEFFFF290) = 0
> > sigaction(SIGTSTP, 0xEFFFF270, 0xEFFFF2F0) = 0
> > dup(4) = 0
> > close(4) = 0
> > close(-1) Err#9 EBADF
>
> The above close() looks odd, although it's too far
> away from the SIGILL to be the cause.
>
> > stat("/var/tmp", 0xEFFFF2F0) = 0
> > getpid() = 11718 [11717]
> > creat("/var/tmp/Ex0000011718", 0600) = 4
> > close(4) = 0
> > open("/var/tmp/Ex0000011718", O_RDWR) = 4
> > write(1, "1B [ 6 4 ; 1 H", 7) = 7
> > sigaction(SIGWINCH, 0xEFFFF0A8, 0xEFFFF128) = 0
> > brk(0x000BCB68) = 0
> > sigaction(SIGINT, 0xEFFFF048, 0xEFFFF0C8) = 0
> > ioctl(2, TCGETS, 0x0009F6D8) = 0
> > ioctl(2, TCSETSW, 0x0009F6D8) = 0
> > ioctl(2, TCGETS, 0x000B3910) = 0
> > ioctl(0, I_STR, 0x0004FEF0) Err#22 EINVAL
> > write(1, "1B [ ? 1 h1B =", 7) = 7
> > "/tmp/x"write(1, " " / t m p / x "", 8) = 8
> > unlink("/var/tmp/Ex0000011718") = 0
> > close(4) = 0
> > stat("/var/tmp", 0xEFFFD370) = 0
> > getpid() = 11718 [11717]
> > creat("/var/tmp/Ex0000011718", 0600) = 4
> > close(4) = 0
> > open("/var/tmp/Ex0000011718", O_RDWR) = 4
>
> Permissions are OK -- creating and opening a file in /var/tmp
> returns a file descriptor.
>
> > open("/tmp/x", O_RDONLY) Err#2 ENOENT
> > [New file] write(1, " [ N e w f i l e ] ", 12) = 12
> > write(1, "1B [ H1B [ J\n ~\n\b ~\n".., 221) = 221
> > read(0, 0xEFFFD517, 1) (sleeping...)
>
> Here vi blocks waiting for input (file descriptor
> 0, the first argument to the read system call, is
> stdin).
>
> > read(0, " i", 1) = 1
>
> Here it reads your "insert" command.
>
> > ioctl(0, I_STR, 0x0004FEF0) Err#22 EINVAL
> > ~ d", 1) = 1
> > ~ ioctl(0, I_STR, 0x0004FEF0) Err#22 EINVAL
>
> Do some ioctl or other on the input descriptor.
>
> > Incurred fault #1, FLTILL %pc = 0x00038B88
>
> Boom. We don't know what happened between the last
> ioctl and the SIGILL. The third argument to ioctl
> (the address of some structure) is the same for
> the last to ioctl calls, which suggests the address
> is legitimate. Also, the SIGILL doesn't occur until
> after the second ioctl returns; if it were otherwise,
> we wouldn't see 'Err#22 EINVAL' as the return code.
>
> On the whole, this is only interesting in so far as
> it shows you that /var/tmp has adequate permissions.
> Do you have Solaris 8 and the time to use -u and resend
> the last 40 lines or so before the SIGILL?
>
> If you don't have Solaris 8 (and you don't want to use
> adb to get a stack trace), I'd follow Robert's advice
> and check your environment. Perhaps TERM is set to
> some odd value.
>
> Regards,
>
> Nicholas Dronen
> _______________________________________________
> SunHELP maillist - SunHELP at sunhelp.org
> http://www.sunhelp.org/mailman/listinfo/sunhelp
>
_________________
*Alan Rubin*
Sun/Unix/Networking/Web Writing
Email:rubin at frell.org
More information about the SunHELP
mailing list