Segmentation fault in csh if "setenv LC_ALL C" is sourced

Mike Tancsa mike at
Tue Dec 23 13:18:29 PST 2003

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
   MFC: fix memory leak in setlocale() helper functions.
   PR#: misc/59910

   Revision  Changes    Path   +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" 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 
>2003     root at  i386
>localhost(4.9-S)[2] diff -u .cshrc
>--- 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 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
>set npath =
>if ( 1 ) then
>set dir = ~/bin/FreeBSD
>if ( -d /home/david/bin/FreeBSD ) then
>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
>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/\..*$//'`
>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
>set u = 4.9-S
>if ( ! 1 ) then
>set prompt = %m(4.9-S)[%h]
>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 
>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 MM_NOASK image/*
>setenv PAGER less
>setenv RNINIT ~/.rninit
>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
>[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 
>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 "", 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 ()
>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,
>Thanks in advance for clues!
>David H. Wolfskill                              david at
>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 at mailing list
>To unsubscribe, send any mail to "freebsd-stable-unsubscribe at"

More information about the freebsd-stable mailing list