On Tue, Jun 11, 2013 at 11:24 PM, Roland Mainz <[email protected]> wrote:
> Hi!
>
> ----
>
> We found another valgrind (patched as described in
> http://lists.research.att.com/pipermail/ast-developers/2013q2/002574.html)
> hit with multidimensional "bool" arrays (this time embedded in a
> compound variable):
> -- snip --
> $ ~/vg/bin/valgrind --track-origins=yes --redzone-size=4096
> --freelist-vol=5000000 ~/bin/ksh -c 'compound c=(bool -a bl) ; ((
> c.bl[7000][8000][9000][10000][11000][12000][13000][14000][15000]=true
> )) ; print -v c'
> ==15822== Memcheck, a memory error detector
> ==15822== Copyright (C) 2002-2012, and GNU GPL'd, by Julian Seward et al.
> ==15822== Using Valgrind-3.8.1 and LibVEX; rerun with -h for copyright info
> ==15822== Command: /home/test001/bin/ksh -c compound\ c=(bool\ -a\
> bl)\ ;\ ((\ 
> c.bl[7000][8000][9000][10000][11000][12000][13000][14000][15000]=true\
> ))\ ;\ print\ -v\ c
> ==15822==
> [snip]
> ==15822== Invalid read of size 8
> ==15822==    at 0x455506: nv_create (name.c:1140)
> ==15822==    by 0x456493: nv_open (name.c:1418)
> ==15822==    by 0x41A738: scope (arith.c:84)
> ==15822==    by 0x41B04E: arith (arith.c:237)
> ==15822==    by 0x46F5CD: arith_exec (streval.c:305)
> ==15822==    by 0x47F608: sh_exec (xec.c:2525)
> ==15822==    by 0x47E2B7: sh_exec (xec.c:2218)
> ==15822==    by 0x40F394: exfile (main.c:599)
> ==15822==    by 0x40E53B: sh_main (main.c:371)
> ==15822==    by 0x40D670: main (pmain.c:45)
> ==15822==  Address 0x5de8680 is 64 bytes inside a block of size 400 free'd
> ==15822==    at 0x4C29BF2: _ast_free (vg_replace_malloc.c:1001)
> ==15822==    by 0x41EE8C: array_grow (array.c:878)
> ==15822==    by 0x4201B3: nv_putsub_20120720 (array.c:1259)
> ==15822==    by 0x42154D: nv_endsubscript (array.c:1609)
> ==15822==    by 0x45504C: nv_create (name.c:1053)
> ==15822==    by 0x456493: nv_open (name.c:1418)
> ==15822==    by 0x41A738: scope (arith.c:84)
> ==15822==    by 0x41B04E: arith (arith.c:237)
> ==15822==    by 0x46F5CD: arith_exec (streval.c:305)
> ==15822==    by 0x47F608: sh_exec (xec.c:2525)
> ==15822==    by 0x47E2B7: sh_exec (xec.c:2218)
> ==15822==    by 0x40F394: exfile (main.c:599)
> ==15822==
> (
>         _Bool -a bl=(
>                 typeset -a [7000]=(
>                         typeset -a [8000]=(
>                                 typeset -a [9000]=(
>                                         typeset -a [10000]=(
>                                                 typeset -a [11000]=(
>                                                         typeset -a [12000]=(
>
> typeset -a [13000]=(
>
>  typeset -a [14000]=(
>
>          [15000]=true
>                                                                         )
>                                                                 )
>                                                         )
>                                                 )
>                                         )
>                                 )
>                         )
>                 )
>         )
> )
> -- snip --
>
> Under "VMALLOC_OPTIONS=abort" control the same issue triggers a SIGSEGV:
> -- snip --
> $ VMALLOC_OPTIONS=abort gdb --args ~/bin/ksh -c 'compound c=(bool -a
> bl) ; (( c.bl[7000][8000][9000][10000][11000][12000][13000][14000][15000]=true
> )) ; print -v c'
> GNU gdb (GDB) SUSE (7.5.1-2.1.1)
> Copyright (C) 2012 Free Software Foundation, Inc.
> [snip]
> (gdb) run
> Starting program: /home/test001/bin/ksh -c compound\ c=\(bool\ -a\
> bl\)\ \;\ \(\(\
> c.bl\[7000\]\[8000\]\[9000\]\[10000\]\[11000\]\[12000\]\[13000\]\[14000\]\[15000\]=true\
> \)\)\ \;\ print\ -v\ c
>
> Program received signal SIGSEGV, Segmentation fault.
> 0x00000000004fabc0 in dtuserdata (dt=0x0, data=0x0, set=0) at
> /home/test001/work/ast_ksh_20130524/build_i386_64bit_debug_patched/src/lib/libast/cdt/dtuser.c:45
> 45                      return asogetptr(&dt->data->user.data);
> (gdb) where
> #0  0x00000000004fabc0 in dtuserdata (dt=0x0, data=0x0, set=0) at
> /home/test001/work/ast_ksh_20130524/build_i386_64bit_debug_patched/src/lib/libast/cdt/dtuser.c:45
> #1  0x0000000000412725 in nv_search (name=0x7fa167 <numbuff.7264+7>
> "7000", root=0x0, mode=0)
>     at 
> /home/test001/work/ast_ksh_20130524/build_i386_64bit_debug_patched/src/cmd/ksh93/sh/nvdisc.c:1057
> #2  0x000000000045551e in nv_create (name=0x2bfffbf25590
> "c.bl[7000][8000][9000][10000][11000][12000][13000][14000][15000]",
> root=0x2bfffbf28950, flags=1442304,
>     dp=0x7fffffffcdf0) at
> /home/test001/work/ast_ksh_20130524/build_i386_64bit_debug_patched/src/cmd/ksh93/sh/name.c:1140
> #3  0x0000000000456494 in nv_open (name=0x2bfffbf253b2
> "c.bl[7000][8000][9000][10000][11000][12000][13000][14000][15000]",
> root=0x2bfffbf28950, flags=1442304)
>     at 
> /home/test001/work/ast_ksh_20130524/build_i386_64bit_debug_patched/src/cmd/ksh93/sh/name.c:1418
> #4  0x000000000041a739 in scope (np=0x2bfffbf253b2,
> lvalue=0x7fffffffd120, assign=512)
>     at 
> /home/test001/work/ast_ksh_20130524/build_i386_64bit_debug_patched/src/cmd/ksh93/sh/arith.c:84
> #5  0x000000000041b04f in arith (ptr=0x7fffffffd168,
> lvalue=0x7fffffffd120, type=1, n=0)
>     at 
> /home/test001/work/ast_ksh_20130524/build_i386_64bit_debug_patched/src/cmd/ksh93/sh/arith.c:237
> #6  0x000000000046f5ce in arith_exec (ep=0x2bfffbf25420) at
> /home/test001/work/ast_ksh_20130524/build_i386_64bit_debug_patched/src/cmd/ksh93/sh/streval.c:305
> #7  0x000000000047f609 in sh_exec (shp=0x7fa180 <sh>,
> t=0x2bfffbf25400, flags=4) at
> /home/test001/work/ast_ksh_20130524/build_i386_64bit_debug_patched/src/cmd/ksh93/sh/xec.c:2525
> #8  0x000000000047e2b8 in sh_exec (shp=0x7fa180 <sh>,
> t=0x2bfffbf25550, flags=5) at
> /home/test001/work/ast_ksh_20130524/build_i386_64bit_debug_patched/src/cmd/ksh93/sh/xec.c:2218
> #9  0x000000000040f395 in exfile (shp=0x7fa180 <sh>,
> iop=0x2bfffbf35090, fno=-1) at
> /home/test001/work/ast_ksh_20130524/build_i386_64bit_debug_patched/src/cmd/ksh93/sh/main.c:599
> #10 0x000000000040e53c in sh_main (ac=3, av=0x7fffffffe1e8,
> userinit=0x0) at
> /home/test001/work/ast_ksh_20130524/build_i386_64bit_debug_patched/src/cmd/ksh93/sh/main.c:371
> #11 0x000000000040d671 in main (argc=3, argv=0x7fffffffe1e8) at
> /home/test001/work/ast_ksh_20130524/build_i386_64bit_debug_patched/src/cmd/ksh93/sh/pmain.c:45
> (gdb) print dt
> $1 = (Dt_t *) 0x0
> -- snip --

... and here is a related (but different!) valgrind hit which is
triggered when the compound variable sits in a non-|fork()|'ing
subshell:
-- snip --
$ ~/vg/bin/valgrind --track-origins=yes ~/bin/ksh -c '( compound
c=(bool -a bl) ; ((
c.bl[7000][8000][9000][10000][11000][12000][13000][14000][15000]=true
)) ; ) ; true'
==15898== Memcheck, a memory error detector
==15898== Copyright (C) 2002-2012, and GNU GPL'd, by Julian Seward et al.
==15898== Using Valgrind-3.8.1 and LibVEX; rerun with -h for copyright info
==15898== Command: /home/test001/bin/ksh -c (\ compound\ c=(bool\ -a\
bl)\ ;\ ((\ 
c.bl[7000][8000][9000][10000][11000][12000][13000][14000][15000]=true\
))\ ;\ )\ ;\ true
[snip]
==15898== Invalid read of size 8
==15898==    at 0x47340E: nv_restore (subshell.c:316)
==15898==    by 0x47452B: sh_subshell (subshell.c:624)
==15898==    by 0x47D9F1: sh_exec (xec.c:2040)
==15898==    by 0x47E2B7: sh_exec (xec.c:2218)
==15898==    by 0x40F394: exfile (main.c:599)
==15898==    by 0x40E53B: sh_main (main.c:371)
==15898==    by 0x40D670: main (pmain.c:45)
==15898==  Address 0x7feffe0b0 is not stack'd, malloc'd or (recently) free'd
[snip]
-- snip --

----

Bye,
Roland

-- 
  __ .  . __
 (o.\ \/ /.o) [email protected]
  \__\/\/__/  MPEG specialist, C&&JAVA&&Sun&&Unix programmer
  /O /==\ O\  TEL +49 641 3992797
 (;O/ \/ \O;)
_______________________________________________
ast-developers mailing list
[email protected]
http://lists.research.att.com/mailman/listinfo/ast-developers

Reply via email to