libtool
[Top][All Lists]
Advanced

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

Can you force the use of the internal argz?


From: Jeff Squyres
Subject: Can you force the use of the internal argz?
Date: Sat, 8 Sep 2012 15:02:57 -0400

Short version:
--------------

The glibc argz functions in RHEL produce valgrind warnings about illegal reads. 
 Can I force the use of libltdl's internal argz functionality to avoid these 
issues?

More details:
-------------

This weekend, I finally sat down to figure out some valgrind libltdl warnings 
that have annoyed me for a very long time (from the embedded libltdl that we 
have in Open MPI).  Here's an example:

-----
==8436== Invalid read of size 8
==8436==    at 0x3D5908848D: _wordcopy_fwd_dest_aligned (in /lib64/libc-2.12.so)
==8436==    by 0x3D5908211D: __GI_memmove (in /lib64/libc-2.12.so)
==8436==    by 0x3D590897DB: argz_insert (in /lib64/libc-2.12.so)
==8436==    by 0x403C8B: lt_argz_insert (ltdl.c:1723)
==8436==    by 0x403E71: lt_argz_insertinorder (ltdl.c:1768)
==8436==    by 0x4040F3: lt_argz_insertdir (ltdl.c:1826)
==8436==    by 0x404298: list_files_by_dir (ltdl.c:1854)
==8436==    by 0x40433D: foreachfile_callback (ltdl.c:1882)
==8436==    by 0x402053: foreach_dirinpath (ltdl.c:720)
==8436==    by 0x404429: lt_dlforeachfile (ltdl.c:1920)
==8436==    by 0x40120B: main (main.c:44)
==8436==  Address 0x4c2e780 is 16 bytes inside a block of size 21 alloc'd
==8436==    at 0x4A066FA: malloc (vg_replace_malloc.c:263)
==8436==    by 0x405C96: lt__malloc (lt__alloc.c:54)
==8436==    by 0x404049: lt_argz_insertdir (ltdl.c:1814)
==8436==    by 0x404298: list_files_by_dir (ltdl.c:1854)
==8436==    by 0x40433D: foreachfile_callback (ltdl.c:1882)
==8436==    by 0x402053: foreach_dirinpath (ltdl.c:720)
==8436==    by 0x404429: lt_dlforeachfile (ltdl.c:1920)
==8436==    by 0x40120B: main (main.c:44)
-----

You can see that the error is that the glibc argz_insert is apparently doing an 
optimized memmove that is assumedly doing some kind of 8 byte read.  The only 
problem is that there is less than 8 bytes left in the string (specifically: 
doing an 8 byte read starting 16 bytes into a 21-byte allocation).  This is 
quite definitely a problem with the RHEL glibc argz -- not libltdl.

But it's still quite annoying.

I would very much like to avoid the system-level argz for this reason, and use 
libltdl's internal argz instead.

If I manually edit libltdl's m4 to make it fail all the argz tests -- thereby 
forcing libltdl to use its internal argz functionality -- then all is fine.  

Can an option be added to make this supported functionality, perchance?  I 
would be happy to provide a patch if the idea isn't terrible.

-- 
Jeff Squyres
address@hidden
For corporate legal information go to: 
http://www.cisco.com/web/about/doing_business/legal/cri/




reply via email to

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