https://bugs.kde.org/show_bug.cgi?id=358980
Bug ID: 358980 Summary: 32 byte leak reported when code uses dlopen and links against pthread Product: valgrind Version: 3.11.0 Platform: Other OS: Linux Status: UNCONFIRMED Severity: normal Priority: NOR Component: memcheck Assignee: jsew...@acm.org Reporter: kdebugzi...@calmarius.net Trivial program reports 32 byte memory leak when it's linked against libdl an libpthread. Several command outputs: $ uname -a Linux Calmarius 3.13.0-77-generic #121-Ubuntu SMP Wed Jan 20 10:50:42 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux $ lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 14.04.3 LTS Release: 14.04 Codename: trusty $ gcc -v Reading specs from /usr/lib/gcc/x86_64-linux-gnu/4.8/specs COLLECT_GCC=gcc COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/4.8/lto-wrapper Target: x86_64-linux-gnu Configured with: ../src/configure -v --with-pkgversion='Ubuntu 4.8.4-2ubuntu1~14.04' --with-bugurl=file:///usr/share/doc/gcc-4.8/README.Bugs --enable-languages=c,c++,java,go,d,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-4.8 --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.8 --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --enable-gnu-unique-object --disable-libmudflap --enable-plugin --with-system-zlib --disable-browser-plugin --enable-java-awt=gtk --enable-gtk-cairo --with-java-home=/usr/lib/jvm/java-1.5.0-gcj-4.8-amd64/jre --enable-java-home --with-jvm-root-dir=/usr/lib/jvm/java-1.5.0-gcj-4.8-amd64 --with-jvm-jar-dir=/usr/lib/jvm-exports/java-1.5.0-gcj-4.8-amd64 --with-arch-directory=amd64 --with-ecj-jar=/usr/share/java/eclipse-ecj.jar --enable-objc-gc --enable-multiarch --disable-werror --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --with-tune=generic --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu Thread model: posix gcc driver version 4.8.4 (Ubuntu 4.8.4-2ubuntu1~14.04) executing gcc version 4.8.1 Consider this trivial program: #include <dlfcn.h> int main() { void* handle = 0; handle = dlopen("libm.so", RTLD_NOW); dlclose(handle); return 0; } Compile this program with this command line: $ gcc -Wl,--no-as-needed -g -fPIC -o stuff main.c -ldl -lpthread The -Wl,--no-as-needed is crucial as it won't link against the specified libraries otherwise. Then just run valgrind: $ valgrind -v --leak-check=full --show-reachable=yes ./stuff ==4995== Memcheck, a memory error detector ==4995== Copyright (C) 2002-2015, and GNU GPL'd, by Julian Seward et al. ==4995== Using Valgrind-3.11.0 and LibVEX; rerun with -h for copyright info ==4995== Command: ./stuff ==4995== --4995-- Valgrind options: --4995-- -v --4995-- --leak-check=full --4995-- --show-reachable=yes --4995-- Contents of /proc/version: --4995-- Linux version 3.13.0-77-generic (buildd@lcy01-30) (gcc version 4.8.2 (Ubuntu 4.8.2-19ubuntu1) ) #121-Ubuntu SMP Wed Jan 20 10:50:42 UTC 2016 --4995-- --4995-- Arch and hwcaps: AMD64, LittleEndian, amd64-cx16-rdtscp-sse3-avx --4995-- Page sizes: currently 4096, max supported 4096 --4995-- Valgrind library directory: /usr/local/lib/valgrind --4995-- Reading syms from /home/dcsirmaz/workdir/crucible/dlopen/stuff --4995-- Reading syms from /lib/x86_64-linux-gnu/ld-2.19.so --4995-- Considering /lib/x86_64-linux-gnu/ld-2.19.so .. --4995-- .. CRC mismatch (computed 4cbae35e wanted 8d683c31) --4995-- Considering /usr/lib/debug/lib/x86_64-linux-gnu/ld-2.19.so .. --4995-- .. CRC is valid --4995-- Reading syms from /usr/local/lib/valgrind/memcheck-amd64-linux --4995-- object doesn't have a dynamic symbol table --4995-- Scheduler: using generic scheduler lock implementation. --4995-- Reading suppressions file: /usr/local/lib/valgrind/default.supp ==4995== embedded gdbserver: reading from /tmp/vgdb-pipe-from-vgdb-to-4995-by-dcsirmaz-on-??? ==4995== embedded gdbserver: writing to /tmp/vgdb-pipe-to-vgdb-from-4995-by-dcsirmaz-on-??? ==4995== embedded gdbserver: shared mem /tmp/vgdb-pipe-shared-mem-vgdb-4995-by-dcsirmaz-on-??? ==4995== ==4995== TO CONTROL THIS PROCESS USING vgdb (which you probably ==4995== don't want to do, unless you know exactly what you're doing, ==4995== or are doing some strange experiment): ==4995== /usr/local/lib/valgrind/../../bin/vgdb --pid=4995 ...command... ==4995== ==4995== TO DEBUG THIS PROCESS USING GDB: start GDB like this ==4995== /path/to/gdb ./stuff ==4995== and then give GDB the following command ==4995== target remote | /usr/local/lib/valgrind/../../bin/vgdb --pid=4995 ==4995== --pid is optional if only one valgrind process is running ==4995== --4995-- REDIR: 0x4019ca0 (ld-linux-x86-64.so.2:strlen) redirected to 0x38056b11 (vgPlain_amd64_linux_REDIR_FOR_strlen) --4995-- Reading syms from /usr/local/lib/valgrind/vgpreload_core-amd64-linux.so --4995-- Reading syms from /usr/local/lib/valgrind/vgpreload_memcheck-amd64-linux.so ==4995== WARNING: new redirection conflicts with existing -- ignoring it --4995-- old: 0x04019ca0 (strlen ) R-> (0000.0) 0x38056b11 vgPlain_amd64_linux_REDIR_FOR_strlen --4995-- new: 0x04019ca0 (strlen ) R-> (2007.0) 0x04c2dc80 strlen --4995-- REDIR: 0x4019a50 (ld-linux-x86-64.so.2:index) redirected to 0x4c2d830 (index) --4995-- REDIR: 0x4019c70 (ld-linux-x86-64.so.2:strcmp) redirected to 0x4c2edd0 (strcmp) --4995-- REDIR: 0x401a9c0 (ld-linux-x86-64.so.2:mempcpy) redirected to 0x4c31e10 (mempcpy) --4995-- Reading syms from /lib/x86_64-linux-gnu/libdl-2.19.so --4995-- Considering /lib/x86_64-linux-gnu/libdl-2.19.so .. --4995-- .. CRC mismatch (computed c1315e8c wanted 37097b60) --4995-- Considering /usr/lib/debug/lib/x86_64-linux-gnu/libdl-2.19.so .. --4995-- .. CRC is valid --4995-- Reading syms from /lib/x86_64-linux-gnu/libpthread-2.19.so --4995-- Considering /lib/x86_64-linux-gnu/libpthread-2.19.so .. --4995-- .. CRC mismatch (computed d568bf33 wanted fb00d679) --4995-- Considering /usr/lib/debug/lib/x86_64-linux-gnu/libpthread-2.19.so .. --4995-- .. CRC is valid --4995-- Reading syms from /lib/x86_64-linux-gnu/libc-2.19.so --4995-- Considering /lib/x86_64-linux-gnu/libc-2.19.so .. --4995-- .. CRC mismatch (computed dc620abc wanted 148cbd6e) --4995-- Considering /usr/lib/debug/lib/x86_64-linux-gnu/libc-2.19.so .. --4995-- .. CRC is valid --4995-- REDIR: 0x52e5d60 (libc.so.6:strcasecmp) redirected to 0x4a25706 (_vgnU_ifunc_wrapper) --4995-- REDIR: 0x52e8050 (libc.so.6:strncasecmp) redirected to 0x4a25706 (_vgnU_ifunc_wrapper) --4995-- REDIR: 0x52e5530 (libc.so.6:memcpy@GLIBC_2.2.5) redirected to 0x4a25706 (_vgnU_ifunc_wrapper) --4995-- REDIR: 0x52e37c0 (libc.so.6:rindex) redirected to 0x4c2d510 (rindex) --4995-- REDIR: 0x52dc220 (libc.so.6:calloc) redirected to 0x4c2c8fe (calloc) --4995-- REDIR: 0x52db750 (libc.so.6:malloc) redirected to 0x4c2ab96 (malloc) --4995-- Reading syms from /lib/x86_64-linux-gnu/libm-2.19.so --4995-- Considering /lib/x86_64-linux-gnu/libm-2.19.so .. --4995-- .. CRC mismatch (computed a46ef660 wanted 767bfa33) --4995-- Considering /usr/lib/debug/lib/x86_64-linux-gnu/libm-2.19.so .. --4995-- .. CRC is valid --4995-- Discarding syms at 0x5a23610-0x5a921b6 in /lib/x86_64-linux-gnu/libm-2.19.so due to munmap() --4995-- REDIR: 0x52dbdf0 (libc.so.6:free) redirected to 0x4c2bcb0 (free) ==4995== ==4995== HEAP SUMMARY: ==4995== in use at exit: 32 bytes in 1 blocks ==4995== total heap usage: 6 allocs, 5 frees, 1,524 bytes allocated ==4995== ==4995== Searching for pointers to 1 not-freed blocks ==4995== Checked 102,648 bytes ==4995== ==4995== 32 bytes in 1 blocks are still reachable in loss record 1 of 1 ==4995== at 0x4C2C994: calloc (vg_replace_malloc.c:711) ==4995== by 0x4E3868F: _dlerror_run (dlerror.c:141) ==4995== by 0x4E380C0: dlopen@@GLIBC_2.2.5 (dlopen.c:87) ==4995== by 0x40066D: main (main.c:7) ==4995== ==4995== LEAK SUMMARY: ==4995== definitely lost: 0 bytes in 0 blocks ==4995== indirectly lost: 0 bytes in 0 blocks ==4995== possibly lost: 0 bytes in 0 blocks ==4995== still reachable: 32 bytes in 1 blocks ==4995== suppressed: 0 bytes in 0 blocks ==4995== ==4995== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0) ==4995== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0) It looks like it's a regression to me. As this very exact bug was reported before and fixed: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=700899 -- You are receiving this mail because: You are watching all bug changes.