David Wolfskill
2003-Dec-23 13:11 UTC
Segmentation fault in csh if "setenv LC_ALL C" is sourced
This was a rather surprising development this morning.
I had updated my -STABLE sources per my daily ritual, then did the
usual "make buildworld" & friends and rebooted. I logged in (via
xdm's
login screen, as usual), and got a login screen before I had a chance to
enter my SSH passphrase. Repeated attempts yielded the same effect.
I switched to a vty and logged in ... and was presented with a login
prompt immediately. This was also repeatable. :-{
I logged in as root -- successfully.
I moved aside ~david/.cshrc, and was then able to login as "david".
I then tried "source .cshrc.save" and found that csh got a
Segmentation
fault while processing that directive. Trying various incantations with
"csh -x" indicated that there was something about the "setenv
LC_ALL C"
line in my ~/.cshrc that it didn't like at all, so I created a new
~/.cshrc like the old one, but without that line (and the one before
it); csh seemed to cope with that OK.
So here's the result from what debugging I've done so far. I confess
that I'm fairly rusty with gdb, but I'm willing to poke aroud:
Script started on Tue Dec 23 12:25:20 2003
localhost(4.9-S)[1] uname -a
FreeBSD localhost 4.9-STABLE FreeBSD 4.9-STABLE #24: Tue Dec 23 06:23:02 PST
2003 root@d146.catwhisker.org:/common/S1/obj/usr/src/sys/LAPTOP_30W i386
localhost(4.9-S)[2] diff -u .cshrc.save .cshrc
--- .cshrc.save Thu Sep 18 05:56:33 2003
+++ .cshrc Tue Dec 23 06:39:14 2003
@@ -125,8 +125,8 @@
setenv PAGER less
setenv RNINIT ~/.rninit
setenv FTP_PASSIVE_MODE
-setenv LANG en_US.ISO8859-1
-setenv LC_ALL C
+# setenv LANG en_US.ISO8859-1
+# setenv LC_ALL C
unset autologout
set history = 900
unset noclobber
localhost(4.9-S)[3] csh -x
localhost(4.9-S)[1] source .cshrc.save
source .cshrc.save
set npath =
if ( 1 ) then
set dir = ~/bin/FreeBSD
if ( -d /home/david/bin/FreeBSD ) then
true
else
else
if ( 1 ) then
if { test -n /home/david/bin/FreeBSD } then
test -n /home/david/bin/FreeBSD
if ( -d /home/david/bin/FreeBSD ) then
set npath = /home/david/bin/FreeBSD
endif
endif
endif
setenv SYMONHOME /opt/SUNWsymon
set path = ( /home/david/bin/FreeBSD ~/bin /bin /usr/bin /sbin /usr/sbin
/usr/local/sbin /usr/local/bin /usr/local/pbm /usr/local/rdb /usr/local/bin/mh
/usr/share/bin /usr/ucb /usr/local/games /usr/games /usr/X11R6/bin
/usr/local/etc /usr/etc /etc /usr/local/office52/program )
set HOST = `hostname | sed -e 's/\..*$//'`
hostname
sed -e s/\..*$//
if ( ! 0 ) then
if ( 1 != 0 ) then
if { test -z %m(4.9-S)[%h] } exit
test -z %m(4.9-S)[%h]
set u = `uname -r`
uname -r
set ul = `echo ${u} | sed -e 's/-.*//'`
sed -e s/-.*//
echo 4.9-STABLE
set ur = `echo ${u} | sed -e 's/^[^-]*-//'`
sed -e s/^[^-]*-//
echo 4.9-STABLE
switch ( STABLE )
set ur = -S
breaksw
set u = 4.9-S
if ( ! 1 ) then
set prompt = %m(4.9-S)[%h]
endif
switch ( FreeBSD )
setenv XAPPLRESDIR /usr/X11R6/lib/X11/app-defaults
setenv LD_LIBRARY_PATH /usr/lib:/usr/local/X11/lib:/usr/local/lib
setenv MY_WM tvtwm
setenv MANPATH
~/man:/usr/local/man:/usr/share/man:/usr/X11R6/man:/usr/local/lib/perl5/5.6.0/man:/usr/share/perl/man:/usr/local/lib/perl5/5.00503/man:/usr/local/games/man:/usr/local/lib/perl5/5.6.1/man
breaksw
endif
if ( 0 ) exit
setenv GROFF_TMAC_PATH /usr/local/tmac:.:/usr/share/groff/tmac
setenv ADDRPATH /home/david/addr:/home/david/addr/business
setenv PRINTER lp
setenv LPDEST lp
setenv EDITOR vi
setenv LESS -sMci
setenv CVSROOT /cvs
setenv HOSTALIASES ~/.hostaliases
setenv BLOCKSIZE 1k
setenv NNTPSERVER news.sf.sbcglobal.net
setenv MM_NOASK image/*
setenv PAGER less
setenv RNINIT ~/.rninit
setenv FTP_PASSIVE_MODE
setenv LANG en_US.ISO8859-1
Segmentation fault (core dumped)
localhost(4.9-S)[4] echo "I built a debug csh in
/usr/obj/usr/src/bin/csh"
I built a debug csh in /usr/obj/usr/src/bin/csh
localhost(4.9-S)[5] /usr/obj/usr/src/bin/csh/csh -x
localhost(4.9-S)[1] source .cshrc.save
source .cshrc.save
[very similar output to the above elided -- dhw]
...
setenv LANG en_US.ISO8859-1
Segmentation fault (core dumped)
localhost(4.9-S)[6] ^Dexit
Script done on Tue Dec 23 12:57:51 2003
OK; here's what gdb said (via cut'n'paste):
localhost(4.9-S)[17] gdb /usr/obj/usr/src/bin/csh/csh csh.core
GNU gdb 4.18 (FreeBSD)
Copyright 1998 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB. Type "show warranty" for
details.
This GDB was configured as "i386-unknown-freebsd"...Deprecated
bfd_read called a
t /usr/src/gnu/usr.bin/binutils/gdb/../../../../contrib/gdb/gdb/dbxread.c line 2
627 in elfstab_build_psymtabs
Deprecated bfd_read called at /usr/src/gnu/usr.bin/binutils/gdb/../../../../cont
rib/gdb/gdb/dbxread.c line 933 in fill_symbuf
Core was generated by `csh'.
Program terminated with signal 11, Segmentation fault.
#0 0x80ad21f in __part_load_locale ()
(gdb) bt
#0 0x80ad21f in __part_load_locale ()
#1 0x80ad0bf in __monetary_load_locale ()
#2 0x8090296 in setlocale ()
#3 0x808fffc in setlocale ()
#4 0x8055fa5 in dosetenv (v=0x812fc40, c=0x8138e00)
at /usr/src/bin/csh/../../contrib/tcsh/sh.func.c:1358
#5 0x80545dc in func (t=0x8138e00, bp=0x80df1f8)
at /usr/src/bin/csh/../../contrib/tcsh/sh.func.c:145
#6 0x8061ca7 in execute (t=0x8138e00, wanttty=1210, pipein=0x0, pipeout=0x0,
do_glob=1) at /usr/src/bin/csh/../../contrib/tcsh/sh.sem.c:654
#7 0x8061f30 in execute (t=0x8132da0, wanttty=1210, pipein=0x0, pipeout=0x0,
do_glob=1) at /usr/src/bin/csh/../../contrib/tcsh/sh.sem.c:731
#8 0x804aab8 in process (catch=0)
at /usr/src/bin/csh/../../contrib/tcsh/sh.c:2159
#9 0x804a349 in srcunit (unit=3, onlyown=0, hflg=0, av=0x812fde8)
at /usr/src/bin/csh/../../contrib/tcsh/sh.c:1691
#10 0x8049d62 in srcfile (f=0xbfbfa130 ".cshrc.save", onlyown=0,
flag=0,
av=0x812fde8) at /usr/src/bin/csh/../../contrib/tcsh/sh.c:1470
#11 0x804ad63 in dosource (t=0x812fde0, c=0x815d3a0)
at /usr/src/bin/csh/../../contrib/tcsh/sh.c:2205
#12 0x80545dc in func (t=0x815d3a0, bp=0x80df238)
at /usr/src/bin/csh/../../contrib/tcsh/sh.func.c:145
#13 0x8061ca7 in execute (t=0x815d3a0, wanttty=1210, pipein=0x0, pipeout=0x0,
---Type <return> to continue, or q <return> to quit---
do_glob=1) at /usr/src/bin/csh/../../contrib/tcsh/sh.sem.c:654
#14 0x8061f30 in execute (t=0x815d380, wanttty=1210, pipein=0x0, pipeout=0x0,
do_glob=1) at /usr/src/bin/csh/../../contrib/tcsh/sh.sem.c:731
#15 0x804aab8 in process (catch=1)
at /usr/src/bin/csh/../../contrib/tcsh/sh.c:2159
#16 0x8049b07 in main (argc=0, argv=0xbfbff53c)
at /usr/src/bin/csh/../../contrib/tcsh/sh.c:1341
(gdb) frame 4
#4 0x8055fa5 in dosetenv (v=0x812fc40, c=0x8138e00)
at /usr/src/bin/csh/../../contrib/tcsh/sh.func.c:1358
1358 (void) setlocale(LC_ALL, "");
(gdb) p dont_free
$1 = 0
(gdb) p k
$2 = 135461960
(gdb) frame 3
#3 0x808fffc in setlocale ()
(gdb)
And looking at the man page for setlocale(), I don't see anything special
regarding the second argument being a string of length 0.
I note further that along with tracking -STABLE on a daily basis,
I've also been tracking -CURRENT on a daily basis on the same
machine, using the same home directory (and thus, the same .cshrc). And
I never saw this issue pop up on -CURRENT.
Am I the only one to see this? Am I doing something wrong (or at least,
unsupported)?
Thanks in advance for clues!
Peace,
david
--
David H. Wolfskill david@catwhisker.org
If you want true virus-protection for your PC, install a non-Microsoft OS
on it. Plausible candidates include FreeBSD, Linux, NetBSD, OpenBSD, and
Solaris (in alphabetical order).
Mike Tancsa
2003-Dec-23 13:19 UTC
Segmentation fault in csh if "setenv LC_ALL C" is sourced
At 04:11 PM 23/12/2003, David Wolfskill wrote:>This was a rather surprising development this morning.My guess its related to jkh 2003/12/22 12:45:16 PST FreeBSD src repository Modified files: (Branch: RELENG_4) lib/libc/locale ldpart.c Log: MFC: fix memory leak in setlocale() helper functions. PR#: misc/59910 Revision Changes Path 1.7.2.4 +6 -6 src/lib/libc/locale/ldpart.c>I had updated my -STABLE sources per my daily ritual, then did the >usual "make buildworld" & friends and rebooted. I logged in (via xdm's >login screen, as usual), and got a login screen before I had a chance to >enter my SSH passphrase. Repeated attempts yielded the same effect. > >I switched to a vty and logged in ... and was presented with a login >prompt immediately. This was also repeatable. :-{ > >I logged in as root -- successfully. > >I moved aside ~david/.cshrc, and was then able to login as "david". > >I then tried "source .cshrc.save" and found that csh got a Segmentation >fault while processing that directive. Trying various incantations with >"csh -x" indicated that there was something about the "setenv LC_ALL C" >line in my ~/.cshrc that it didn't like at all, so I created a new >~/.cshrc like the old one, but without that line (and the one before >it); csh seemed to cope with that OK. > >So here's the result from what debugging I've done so far. I confess >that I'm fairly rusty with gdb, but I'm willing to poke aroud: > >Script started on Tue Dec 23 12:25:20 2003 >localhost(4.9-S)[1] uname -a >FreeBSD localhost 4.9-STABLE FreeBSD 4.9-STABLE #24: Tue Dec 23 06:23:02 >PST >2003 root@d146.catwhisker.org:/common/S1/obj/usr/src/sys/LAPTOP_30W i386 >localhost(4.9-S)[2] diff -u .cshrc.save .cshrc >--- .cshrc.save Thu Sep 18 05:56:33 2003 >+++ .cshrc Tue Dec 23 06:39:14 2003 >@@ -125,8 +125,8 @@ > setenv PAGER less > setenv RNINIT ~/.rninit > setenv FTP_PASSIVE_MODE >-setenv LANG en_US.ISO8859-1 >-setenv LC_ALL C >+# setenv LANG en_US.ISO8859-1 >+# setenv LC_ALL C > unset autologout > set history = 900 > unset noclobber >localhost(4.9-S)[3] csh -x >localhost(4.9-S)[1] source .cshrc.save >source .cshrc.save >set npath >if ( 1 ) then >set dir = ~/bin/FreeBSD >if ( -d /home/david/bin/FreeBSD ) then >true >else >else >if ( 1 ) then >if { test -n /home/david/bin/FreeBSD } then >test -n /home/david/bin/FreeBSD >if ( -d /home/david/bin/FreeBSD ) then >set npath = /home/david/bin/FreeBSD >endif >endif >endif >setenv SYMONHOME /opt/SUNWsymon >set path = ( /home/david/bin/FreeBSD ~/bin /bin /usr/bin /sbin /usr/sbin >/usr/local/sbin /usr/local/bin /usr/local/pbm /usr/local/rdb >/usr/local/bin/mh /usr/share/bin /usr/ucb /usr/local/games /usr/games >/usr/X11R6/bin /usr/local/etc /usr/etc /etc /usr/local/office52/program ) >set HOST = `hostname | sed -e 's/\..*$//'` >hostname >sed -e s/\..*$// >if ( ! 0 ) then >if ( 1 != 0 ) then >if { test -z %m(4.9-S)[%h] } exit >test -z %m(4.9-S)[%h] >set u = `uname -r` >uname -r >set ul = `echo ${u} | sed -e 's/-.*//'` >sed -e s/-.*// >echo 4.9-STABLE >set ur = `echo ${u} | sed -e 's/^[^-]*-//'` >sed -e s/^[^-]*-// >echo 4.9-STABLE >switch ( STABLE ) >set ur = -S >breaksw >set u = 4.9-S >if ( ! 1 ) then >set prompt = %m(4.9-S)[%h] >endif >switch ( FreeBSD ) >setenv XAPPLRESDIR /usr/X11R6/lib/X11/app-defaults >setenv LD_LIBRARY_PATH /usr/lib:/usr/local/X11/lib:/usr/local/lib >setenv MY_WM tvtwm >setenv MANPATH >~/man:/usr/local/man:/usr/share/man:/usr/X11R6/man:/usr/local/lib/perl5/5.6.0/man:/usr/share/perl/man:/usr/local/lib/perl5/5.00503/man:/usr/local/games/man:/usr/local/lib/perl5/5.6.1/man >breaksw >endif >if ( 0 ) exit >setenv GROFF_TMAC_PATH /usr/local/tmac:.:/usr/share/groff/tmac >setenv ADDRPATH /home/david/addr:/home/david/addr/business >setenv PRINTER lp >setenv LPDEST lp >setenv EDITOR vi >setenv LESS -sMci >setenv CVSROOT /cvs >setenv HOSTALIASES ~/.hostaliases >setenv BLOCKSIZE 1k >setenv NNTPSERVER news.sf.sbcglobal.net >setenv MM_NOASK image/* >setenv PAGER less >setenv RNINIT ~/.rninit >setenv FTP_PASSIVE_MODE >setenv LANG en_US.ISO8859-1 >Segmentation fault (core dumped) >localhost(4.9-S)[4] echo "I built a debug csh in /usr/obj/usr/src/bin/csh" >I built a debug csh in /usr/obj/usr/src/bin/csh >localhost(4.9-S)[5] /usr/obj/usr/src/bin/csh/csh -x >localhost(4.9-S)[1] source .cshrc.save >source .cshrc.save >[very similar output to the above elided -- dhw] >... >setenv LANG en_US.ISO8859-1 >Segmentation fault (core dumped) >localhost(4.9-S)[6] ^Dexit > >Script done on Tue Dec 23 12:57:51 2003 > >OK; here's what gdb said (via cut'n'paste): > >localhost(4.9-S)[17] gdb /usr/obj/usr/src/bin/csh/csh csh.core >GNU gdb 4.18 (FreeBSD) >Copyright 1998 Free Software Foundation, Inc. >GDB is free software, covered by the GNU General Public License, and you are >welcome to change it and/or distribute copies of it under certain conditions. >Type "show copying" to see the conditions. >There is absolutely no warranty for GDB. Type "show warranty" for details. >This GDB was configured as "i386-unknown-freebsd"...Deprecated bfd_read >called a >t /usr/src/gnu/usr.bin/binutils/gdb/../../../../contrib/gdb/gdb/dbxread.c >line 2 >627 in elfstab_build_psymtabs >Deprecated bfd_read called at >/usr/src/gnu/usr.bin/binutils/gdb/../../../../cont >rib/gdb/gdb/dbxread.c line 933 in fill_symbuf > >Core was generated by `csh'. >Program terminated with signal 11, Segmentation fault. >#0 0x80ad21f in __part_load_locale () >(gdb) bt >#0 0x80ad21f in __part_load_locale () >#1 0x80ad0bf in __monetary_load_locale () >#2 0x8090296 in setlocale () >#3 0x808fffc in setlocale () >#4 0x8055fa5 in dosetenv (v=0x812fc40, c=0x8138e00) > at /usr/src/bin/csh/../../contrib/tcsh/sh.func.c:1358 >#5 0x80545dc in func (t=0x8138e00, bp=0x80df1f8) > at /usr/src/bin/csh/../../contrib/tcsh/sh.func.c:145 >#6 0x8061ca7 in execute (t=0x8138e00, wanttty=1210, pipein=0x0, pipeout=0x0, > do_glob=1) at /usr/src/bin/csh/../../contrib/tcsh/sh.sem.c:654 >#7 0x8061f30 in execute (t=0x8132da0, wanttty=1210, pipein=0x0, pipeout=0x0, > do_glob=1) at /usr/src/bin/csh/../../contrib/tcsh/sh.sem.c:731 >#8 0x804aab8 in process (catch=0) > at /usr/src/bin/csh/../../contrib/tcsh/sh.c:2159 >#9 0x804a349 in srcunit (unit=3, onlyown=0, hflg=0, av=0x812fde8) > at /usr/src/bin/csh/../../contrib/tcsh/sh.c:1691 >#10 0x8049d62 in srcfile (f=0xbfbfa130 ".cshrc.save", onlyown=0, flag=0, > av=0x812fde8) at /usr/src/bin/csh/../../contrib/tcsh/sh.c:1470 >#11 0x804ad63 in dosource (t=0x812fde0, c=0x815d3a0) > at /usr/src/bin/csh/../../contrib/tcsh/sh.c:2205 >#12 0x80545dc in func (t=0x815d3a0, bp=0x80df238) > at /usr/src/bin/csh/../../contrib/tcsh/sh.func.c:145 >#13 0x8061ca7 in execute (t=0x815d3a0, wanttty=1210, pipein=0x0, pipeout=0x0, >---Type <return> to continue, or q <return> to quit--- > do_glob=1) at /usr/src/bin/csh/../../contrib/tcsh/sh.sem.c:654 >#14 0x8061f30 in execute (t=0x815d380, wanttty=1210, pipein=0x0, pipeout=0x0, > do_glob=1) at /usr/src/bin/csh/../../contrib/tcsh/sh.sem.c:731 >#15 0x804aab8 in process (catch=1) > at /usr/src/bin/csh/../../contrib/tcsh/sh.c:2159 >#16 0x8049b07 in main (argc=0, argv=0xbfbff53c) > at /usr/src/bin/csh/../../contrib/tcsh/sh.c:1341 >(gdb) frame 4 >#4 0x8055fa5 in dosetenv (v=0x812fc40, c=0x8138e00) > at /usr/src/bin/csh/../../contrib/tcsh/sh.func.c:1358 >1358 (void) setlocale(LC_ALL, ""); >(gdb) p dont_free >$1 = 0 >(gdb) p k >$2 = 135461960 >(gdb) frame 3 >#3 0x808fffc in setlocale () >(gdb) > > >And looking at the man page for setlocale(), I don't see anything special >regarding the second argument being a string of length 0. > >I note further that along with tracking -STABLE on a daily basis, >I've also been tracking -CURRENT on a daily basis on the same >machine, using the same home directory (and thus, the same .cshrc). And >I never saw this issue pop up on -CURRENT. > >Am I the only one to see this? Am I doing something wrong (or at least, >unsupported)? > >Thanks in advance for clues! > >Peace, >david >-- >David H. Wolfskill david@catwhisker.org >If you want true virus-protection for your PC, install a non-Microsoft OS >on it. Plausible candidates include FreeBSD, Linux, NetBSD, OpenBSD, and >Solaris (in alphabetical order). >_______________________________________________ >freebsd-stable@freebsd.org mailing list >http://lists.freebsd.org/mailman/listinfo/freebsd-stable >To unsubscribe, send any mail to "freebsd-stable-unsubscribe@freebsd.org"
Colin Percival
2003-Dec-23 13:19 UTC
Segmentation fault in csh if "setenv LC_ALL C" is sourced
At 13:11 23/12/2003 -0800, David Wolfskill wrote:>Am I the only one to see this? Am I doing something wrong (or at least, >unsupported)?The pointy hat goes to jkh on this one. He MFCed half of a bugfix about 24 hours ago, and didn't remember about the other half until 11 hours later. http://docs.freebsd.org/cgi/mid.cgi?200312230729.hBN7TWRi009914 Try cvsuping again; the problem should now be fixed. Colin Percival