bug-bash
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH] Memory leak in locale.c set_default_locale


From: Eduardo Bustamante
Subject: Re: [PATCH] Memory leak in locale.c set_default_locale
Date: Thu, 8 Jun 2017 10:02:49 -0500
User-agent: NeoMutt/20170113 (1.7.2)

On Thu, Jun 08, 2017 at 10:30:34AM -0400, Chet Ramey wrote:
[...]
> That would be strange behavior.  If it complains about that, why doesn't it
> complain about all memory that bash holds onto but doesn't free before it
> exits?

Hm. You're right. It seems to be glibc's fault here. The leak happens when I
turn on compiler optimizations, but it goes away if I turn them off. Which
means it's not bash.

Sorry about the noise :-)


== ASAN / -O2 ==

dualbus@debian:~/src/gnu/bash-build$ CFLAGS='-O2 -fsanitize=address 
-fno-omit-frame-pointer' LDFLAGS=-lasan ../bash/configure --without-bash-malloc 
&& make -j4
[...]
rm -f bash
gcc -L./builtins -L./lib/readline -L./lib/readline -L./lib/glob -L./lib/tilde  
-L./lib/sh  -lasan -rdynamic -O2 -fsanitize=address -fno-omit-frame-pointer 
-Wno-parentheses -Wno-format-security   -o bash shell.o eval.o y.tab.o 
general.o make_cmd.o print_cmd.o  dispose_cmd.o execute_cmd.o variables.o 
copy_cmd.o error.o expr.o flags.o jobs.o subst.o hashcmd.o hashlib.o 
mailcheck.o trap.o input.o unwind_prot.o pathexp.o sig.o test.o version.o 
alias.o array.o arrayfunc.o assoc.o braces.o bracecomp.o bashhist.o bashline.o  
list.o stringlib.o locale.o findcmd.o redir.o pcomplete.o pcomplib.o syntax.o 
xmalloc.o  -lbuiltins -lglob -lsh -lreadline -lhistory -ltermcap -ltilde     
-ldl 
./lib/sh/libsh.a(tmpfile.o): In function `sh_mktmpname':
tmpfile.c:(.text+0x161): warning: the use of `mktemp' is dangerous, better use 
`mkstemp' or `mkdtemp'
ls -l bash
-rwxr-x--- 1 dualbus dualbus 2916104 Jun  8 09:40 bash
size bash
   text    data     bss     dec     hex filename
2444962  287960   81184 2814106  2af09a bash

dualbus@debian:~/src/gnu/bash-build$ ./bash
bash-4.4$ echo hi
hi
bash-4.4$ exit
exit

=================================================================
==3830==ERROR: LeakSanitizer: detected memory leaks

Direct leak of 12 byte(s) in 1 object(s) allocated from:
    #0 0x7f4981cd1d28 in malloc (/usr/lib/x86_64-linux-gnu/libasan.so.3+0xc1d28)
    #1 0x55d742038866 in xmalloc 
(/home/dualbus/src/gnu/bash-build/bash+0x14f866)
    #2 0x55d74202adf2 in set_default_locale 
(/home/dualbus/src/gnu/bash-build/bash+0x141df2)
    #3 0x55d741f697f0 in main (/home/dualbus/src/gnu/bash-build/bash+0x807f0)
    #4 0x7f49814642b0 in __libc_start_main 
(/lib/x86_64-linux-gnu/libc.so.6+0x202b0)

SUMMARY: AddressSanitizer: 12 byte(s) leaked in 1 allocation(s).


== Valgrind / -O2 ==

dualbus@debian:~/src/gnu/bash-build$ CFLAGS='-O2 -fno-omit-frame-pointer' 
LDFLAGS= ../bash/configure --without-bash-malloc && make -j4 
[...]
rm -f bash
gcc -L./builtins -L./lib/readline -L./lib/readline -L./lib/glob -L./lib/tilde  
-L./lib/sh  -rdynamic -O2 -fno-omit-frame-pointer -Wno-parentheses 
-Wno-format-security   -o bash shell.o eval.o y.tab.o general.o make_cmd.o 
print_cmd.o  dispose_cmd.o execute_cmd.o variables.o copy_cmd.o error.o expr.o 
flags.o jobs.o subst.o hashcmd.o hashlib.o mailcheck.o trap.o input.o 
unwind_prot.o pathexp.o sig.o test.o version.o alias.o array.o arrayfunc.o 
assoc.o braces.o bracecomp.o bashhist.o bashline.o  list.o stringlib.o locale.o 
findcmd.o redir.o pcomplete.o pcomplib.o syntax.o xmalloc.o  -lbuiltins -lglob 
-lsh -lreadline -lhistory -ltermcap -ltilde     -ldl 
./lib/sh/libsh.a(tmpfile.o): In function `sh_mktmpname':
tmpfile.c:(.text+0x161): warning: the use of `mktemp' is dangerous, better use 
`mkstemp' or `mkdtemp'
ls -l bash
-rwxr-x--- 1 dualbus dualbus 1321952 Jun  8 09:51 bash
size bash
   text    data     bss     dec     hex filename
1114390   47940   40496 1202826  125a8a bash

dualbus@debian:~/src/gnu/bash-build$ valgrind ./bash
==18244== Memcheck, a memory error detector
==18244== Copyright (C) 2002-2015, and GNU GPL'd, by Julian Seward et al.
==18244== Using Valgrind-3.12.0.SVN and LibVEX; rerun with -h for copyright info
==18244== Command: ./bash
==18244== 
bash-4.4$ echo hi
hi
bash-4.4$ exit
exit
==18244== 
==18244== HEAP SUMMARY:
==18244==     in use at exit: 347,357 bytes in 2,879 blocks
==18244==   total heap usage: 4,406 allocs, 1,527 frees, 607,170 bytes allocated
==18244== 
==18244== LEAK SUMMARY:
==18244==    definitely lost: 12 bytes in 1 blocks
==18244==    indirectly lost: 0 bytes in 0 blocks
==18244==      possibly lost: 0 bytes in 0 blocks
==18244==    still reachable: 347,345 bytes in 2,878 blocks
==18244==         suppressed: 0 bytes in 0 blocks
==18244== Rerun with --leak-check=full to see details of leaked memory
==18244== 
==18244== For counts of detected and suppressed errors, rerun with: -v
==18244== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)


== ASAN / -O0 ==

dualbus@debian:~/src/gnu/bash-build$ CFLAGS='-O0 -fsanitize=address 
-fno-omit-frame-pointer' LDFLAGS=-lasan ../bash/configure --without-bash-malloc 
&& make -j4
[...]
rm -f bash
gcc -L./builtins -L./lib/readline -L./lib/readline -L./lib/glob -L./lib/tilde  
-L./lib/sh  -lasan -rdynamic -O0 -fsanitize=address -fno-omit-frame-pointer 
-Wno-parentheses -Wno-format-security   -o bash shell.o eval.o y.tab.o 
general.o make_cmd.o print_cmd.o  dispose_cmd.o execute_cmd.o variables.o 
copy_cmd.o error.o expr.o flags.o jobs.o subst.o hashcmd.o hashlib.o 
mailcheck.o trap.o input.o unwind_prot.o pathexp.o sig.o test.o version.o 
alias.o array.o arrayfunc.o assoc.o braces.o bracecomp.o bashhist.o bashline.o  
list.o stringlib.o locale.o findcmd.o redir.o pcomplete.o pcomplib.o syntax.o 
xmalloc.o  -lbuiltins -lglob -lsh -lreadline -lhistory -ltermcap -ltilde     
-ldl 
./lib/sh/libsh.a(tmpfile.o): In function `sh_mktmpname':
tmpfile.c:(.text+0x3e4): warning: the use of `mktemp' is dangerous, better use 
`mkstemp' or `mkdtemp'
ls -l bash
-rwxr-x--- 1 dualbus dualbus 3433608 Jun  8 09:56 bash
size bash
   text    data     bss     dec     hex filename
2933580  297264   83904 3314748  32943c bash

dualbus@debian:~/src/gnu/bash-build$ ./bash
bash-4.4$ echo hi
hi
bash-4.4$ exit


== Valgrind / -O0 ==

dualbus@debian:~/src/gnu/bash-build$ CFLAGS='-O0 -fno-omit-frame-pointer' 
LDFLAGS= ../bash/configure --without-bash-malloc && make -j4 
[...]
rm -f bash
gcc -L./builtins -L./lib/readline -L./lib/readline -L./lib/glob -L./lib/tilde  
-L./lib/sh  -rdynamic -O0 -fno-omit-frame-pointer -Wno-parentheses 
-Wno-format-security   -o bash shell.o eval.o y.tab.o general.o make_cmd.o 
print_cmd.o  dispose_cmd.o execute_cmd.o variables.o copy_cmd.o error.o expr.o 
flags.o jobs.o subst.o hashcmd.o hashlib.o mailcheck.o trap.o input.o 
unwind_prot.o pathexp.o sig.o test.o version.o alias.o array.o arrayfunc.o 
assoc.o braces.o bracecomp.o bashhist.o bashline.o  list.o stringlib.o locale.o 
findcmd.o redir.o pcomplete.o pcomplib.o syntax.o xmalloc.o  -lbuiltins -lglob 
-lsh -lreadline -lhistory -ltermcap -ltilde     -ldl 
./lib/sh/libsh.a(tmpfile.o): In function `sh_mktmpname':
tmpfile.c:(.text+0x25e): warning: the use of `mktemp' is dangerous, better use 
`mkstemp' or `mkdtemp'
ls -l bash
-rwxr-x--- 1 dualbus dualbus 1511808 Jun  8 10:00 bash
size bash
   text    data     bss     dec     hex filename
1286664   48380   41072 1376116  14ff74 bash

dualbus@debian:~/src/gnu/bash-build$ valgrind ./bash
==333== Memcheck, a memory error detector
==333== Copyright (C) 2002-2015, and GNU GPL'd, by Julian Seward et al.
==333== Using Valgrind-3.12.0.SVN and LibVEX; rerun with -h for copyright info
==333== Command: ./bash
==333== 
bash-4.4$ echo hi
hi
bash-4.4$ exit
exit
==333== 
==333== HEAP SUMMARY:
==333==     in use at exit: 347,442 bytes in 2,885 blocks
==333==   total heap usage: 4,412 allocs, 1,527 frees, 607,323 bytes allocated
==333== 
==333== LEAK SUMMARY:
==333==    definitely lost: 0 bytes in 0 blocks
==333==    indirectly lost: 0 bytes in 0 blocks
==333==      possibly lost: 0 bytes in 0 blocks
==333==    still reachable: 347,442 bytes in 2,885 blocks
==333==         suppressed: 0 bytes in 0 blocks
==333== Rerun with --leak-check=full to see details of leaked memory
==333== 
==333== For counts of detected and suppressed errors, rerun with: -v
==333== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)


-- 
Eduardo Bustamante
https://dualbus.me/



reply via email to

[Prev in Thread] Current Thread [Next in Thread]