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