*Synopsis*: /usr/bin/hash core dump with invalid arguments

CR 6857344 changed on Sep 18 2009 by <User 1-5Q-4224>

=== Field ============ === New Value ============= === Old Value =============

SR 1-563875604
 Functionality         Nonessential                                           
 Hardware              generic                                                
 Impact                Critical                                               
 Operating System      snv_123                                                
 Product Build         snv_123                                                
 Product Name          solaris                                                
 Product Release       solaris_nevada                                         
 Severity              3                                                      
====================== =========================== ===========================

     
*Change Request ID*: 6857344

*Synopsis*: /usr/bin/hash core dump with invalid arguments

  Product: solaris
  Category: shell
  Subcategory: korn93
  Type: Defect
  Subtype: 
  Status: 4-Defer
  Substatus: Future Project
  Priority: 3-Medium
  Introduced In Release: 
  Introduced In Build: 
  Responsible Engineer: 
  Keywords: 

=== *Description* ============================================================
Through user error, I typed the following invalid comand, but I got a core dump:

$ /usr/bin/hash -md5 file.txt
hash: -m: unknown option
hash: -d: unknown option
hash: -5: unknown option
Usage: hash [-ptx] [name[=value]...]
Segmentation Fault(coredump)
$

This shouldn't dump a core. I've verified this on two seperate systems. The 
following information was taken from snv_110 on an x86 system:

pstack gives me no useful information:

$ pstack core
core 'core' of 20004:   /usr/bin/hash -md5 file.txt
$

Similarly, stopping the process at SEGV and attaching mdb shows no stack:

$ truss -SSEGV /usr/bin/hash -md5 file.txt
execve("/usr/bin/hash", 0x080474AC, 0x080474BC)  argc = 3
...etc...
Usage: hash [-ptx] [name[=value]...]
write(2, " U s a g e :   h a s h  ".., 37)      = 37
    Incurred fault #6, FLTBOUNDS  %pc = 0x00000000
      siginfo: SIGSEGV SEGV_MAPERR addr=0x00000000
    Received signal #11, SIGSEGV [default]
      siginfo: SIGSEGV SEGV_MAPERR addr=0x00000000
$ mdb -p 20025
Loading modules: [ ld.so.1 ]
> $c                    <==== NO STACK TRACE HERE
> $r
%cs = 0x0043            %eax = 0x00000006 
%ds = 0x004b            %ebx = 0x00000000 
%ss = 0x004b            %ecx = 0x00000000 
%es = 0x004b            %edx = 0xfee16fec libshell.so.1`sh+0x284
%fs = 0x0000            %esi = 0x00000000 
%gs = 0x01c3            %edi = 0x00000000 

 %eip = 0x00000000 
 %ebp = 0x00000000
%kesp = 0x00000000

%eflags = 0x00010206
  id=0 vip=0 vif=0 ac=0 vm=0 rf=1 nt=0 iopl=0x0
  status=<of,df,IF,tf,sf,zf,af,PF,cf>

   %esp = 0x00000000
%trapno = 0xe
   %err = 0x14
> 

It would appear that %esp has been NULL'd out here, hence no stack. However, 
%eip is also NULL, which probably explains the core dump in this case.


The following information was taken from snv_115 on SPARC:

% /usr/bin/hash -md5 file.txt
hash: -m: unknown option
hash: -d: unknown option
hash: -5: unknown option
Usage: hash [-ptx] [name[=value]...]
Segmentation Fault (core dumped)
% pstack core
core 'core' of 280139:  /usr/bin/hash -md5 file.txt
 ff23e3f8 longjmp  (0, 0, ff1ac000, 6, 0, ff1aeee4) + 8
 000111bc main     (3, 22000, 11338, 11000, 14, 5) + 9c
 00010d00 _start   (0, 0, 0, 0, 0, 0) + 108
% mdb /usr/bin/hash ./core
Loading modules: [ libc.so.1 ld.so.1 ]
> $C
ffbff990 libc.so.1`longjmp+8(0, 0, ff1ac000, 6, 0, ff1aeee4)
ffbffac8 main+0x9c(3, 22000, 11338, 11000, 14, 5)
ffbffba8 _start+0x108(0, 0, 0, 0, 0, 0)
> $r
%g0 = 0x00000000                 %l0 = 0x00000008 
%g1 = 0x00000000                 %l1 = 0x00000000 
%g2 = 0x00000000                 %l2 = 0xff1aeee4 libshell.so.1`sh
%g3 = 0x00000000                 %l3 = 0xff1af448 libshell.so.1`_Fcin
%g4 = 0x00000000                 %l4 = 0x0000003c 
%g5 = 0x00000028                 %l5 = 0x00000000 
%g6 = 0x00000000                 %l6 = 0xff1aeee4 libshell.so.1`sh
%g7 = 0xff372a00                 %l7 = 0x00000008 
%o0 = 0xff1af168 libshell.so.1`sh+0x284 %i0 = 0x00000000 
%o1 = 0x00000006                 %i1 = 0x00000000 
%o2 = 0x00000000                 %i2 = 0xff1ac000 
%o3 = 0x00003400                 %i3 = 0x00000006 
%o4 = 0x00000000                 %i4 = 0x00000000 
%o5 = 0xff145ed8 libshell.so.1`lex_advance %i5 = 0xff1aeee4 libshell.so.1`sh
%o6 = 0xffbff990                 %i6 = 0xffbffac8 
%o7 = 0xff138d20 libshell.so.1`sh_trap+0x3a8 %i7 = 0x000111bc main+0x9c

 %psr = 0xfe001001 impl=0xf ver=0xe icc=nzvc
                   ec=0 ef=4096 pil=0 s=0 ps=0 et=0 cwp=0x1
   %y = 0x00000000
  %pc = 0xff23e3f8 libc.so.1`longjmp+8
 %npc = 0xff23e3fc libc.so.1`longjmp+0xc
  %sp = 0xffbff990
  %fp = 0xffbffac8

 %wim = 0x00000000
 %tbr = 0x00000000


If I actually run either ksh93 or ksh then "hash -md5 file.txt", then it gives 
me the correct usage (and no dump):

ksh93$ hash -md5 file.txt
alias: -md5: bad option(s)
ksh83$ 

ksh$ hash -md5 file.txt
ksh: hash: bad option(s)
ksh$ 

It appears to be the presence of any unknown arg which triggers the core dump.


I've logged this against ksh93 as I believe /usr/bin/hash now uses libshell, 
and it is something in here which is crashing - please recategorise if 
necessary. I also don't know the ksh93 code layout well enough to localise 
where the problem is.

*** (#1 of 1): 2009-07-03 11:28:13 GMT+00:00 <User 1-5Q-8389>


=== *Public Comments* ========================================================
It is probably solved in the latest upstream, which should be integrated soon.

*** (#1 of 3): 2009-07-03 11:38:47 GMT+00:00 <User 1-1SURPB>

I reproduced this on snv_111b on intel ( which is a few builds earlier than the 
submitter was using and different architecture). I didn't get a stack from the 
core, so I used truss -u'*' to see what calls it makes before failing.
I then used truss to start it and stop it at a convenient point:
truss -Tmmap /usr/bin/hash -md5 file.txt

and then used mdb -p and breakpoints to get close to where it fails.
I then used:
while :; do echo "::stack" | mdb -p 2068; echo ":s" | mdb -p 2068; done

to single step it to the failure point, and can now get the core and stack 
trace:

libc_hwcap1.so.1`_sbrk_unlocked+0x5d(0)
libc_hwcap1.so.1`sbrk+0x35(0, 0, 1, d08b7bfa)
libast.so.1`sbrkmem+0x90(d08efdf0, 8061210, a000, c000, d08efe88, 0)
libast.so.1`vmextend+0x105(d08efdf0, 400, d08b6184, d08b68f6)
libast.so.1`bestalloc+0x2c8(d08efdf0, 400, 8047308, d08b5936, 80472f0, d07f0298
)
libast.so.1`_ast_malloc+0xa0(400, d0af56da, 47c, d0882385)
libast.so.1`sfsetbuf+0x91d(806af10, 0, ffffffff, d087aeca)
libast.so.1`_sfmode+0x353(806af10, 1, 0, d087c146)
libast.so.1`sfnew+0x36b(0, 0, ffffffff, ffffffff, 7, 806ad80)
libast.so.1`_ast_setlocale+0x65c(6, 8047dfb, 0, d0999762)
libshell.so.1`put_lang+0xff(8068ba0, 8047dfb, 1, 80695a8)
libshell.so.1`nv_putv+0xe0(8068ba0, 8047dfb, 1, 80695a8)
libshell.so.1`nv_putval+0xa5(8068ba0, 8047dfb, 1, 8047560)
libshell.so.1`nv_open+0x8d7(8047df6, 8068ed8, 102280, d099c6c2)
libshell.so.1`env_init+0x7a(d0a06d68, d0999120, a, d099accc)
libshell.so.1`sh_init+0x417(4, 8047a50, 0, d0a30140)
main+0x96(3, 8047ad0, 8047ae0, 8047a8c)
_start+0x7d(3, 8047bdc, 8047bea, 8047bef, 0, 8047bf8)

mdb: stop on SIGSEGV
mdb: target stopped at:
libc_hwcap1.so.1`_sbrk_unlocked+0x5d:   movl   %edi,(%eax)

*** (#2 of 3): 2009-07-07 15:55:42 GMT+00:00 <User 1-5Q-6085>

Roland Mainz:

The next ksh93-integration update should have the final fix (the original 
problem is that libshell does not initalise some points for error handling 
(e.g. |setjmp()|) correctly which causes the |longjmp()| calls to jump to 
niravana. The real fix is to rip-out the whole manual |setjmp()|/|longjmp()| 
and replace it with a clean stack-like architecture to handle the nested 
|longjmp()|'s correctly).

*** (#3 of 3): 2009-08-13 08:56:17 GMT+00:00 <User 1-1SURPB>


=== *Workaround* =============================================================

=== *Additional Details* =====================================================
        Targeted Release: 
        Commit To Fix In Build: 
        Fixed In Build: 
        Integrated In Build: 
        Verified In Build: 
  See Also: 6793763, 6848486
  Duplicate of: 
  Hooks:
        Hook1: 
        Hook2: 
        Hook3: 
        Hook4: 
        Hook5: 
        Hook6: 
  Program Management: 
  Root Cause: 
  Fix Affects Documentation: No
  Fix Affects Localization: No

=== *History* ================================================================
        Date Submitted: 2009-07-03 11:28:13 GMT+00:00
        Submitted By: <User 1-5Q-8389>

        Status Changed    Date Updated                  Updated By
        3-Accepted        2009-07-03 11:38:47 GMT+00:00 <User 1-1SURPB>
        4-Defer           2009-08-13 08:56:17 GMT+00:00 <User 1-1SURPB>


=== *Service Request* ========================================================
        Impact: Limited
        Functionality: Nonessential
        Severity: 5
        Product Name: solaris
        Product Release: solaris_nevada
        Product Build: 
        Operating System: snv_115
        Hardware: generic
        Submitted Date: 2009-07-03 11:28:13 GMT+00:00


=== *Service Request* ========================================================
        Impact: Critical
        Functionality: Nonessential
        Severity: 3
        Product Name: solaris
        Product Release: solaris_nevada
        Product Build: snv_123
        Operating System: snv_123
        Hardware: generic
        Submitted Date: 2009-09-18 21:51:40 GMT+00:00


=== *Multiple Release (MR) Cluster* - 0 ======================================

Reply via email to