Memory leak in tar?

View: New views
1 Messages — Rating Filter:   Alert me  

Memory leak in tar?

by Ondřej Vašík-2 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Hello,
As reported in https://bugzilla.lustre.org/show_bug.cgi?id=20213 and
later in https://bugzilla.redhat.com/show_bug.cgi?id=518079 , it seems
that tar has memory leak. Although it is reported against xattr support,
leak seems to be general (not Fedora/RHEL related) - present even with
upstream tar.

Reproducing is easy - just download
https://bugzilla.redhat.com/attachment.cgi?id=357964
file, and try to list/extract that file with tar under valgrind.
Valgrind reports leak:
==14467== 1,111,237 bytes in 1,741 blocks are definitely lost in loss
record 3 of 3
==14467==    at 0x4005400: malloc (vg_replace_malloc.c:149)
==14467==    by 0x8076751: xmalloc (xmalloc.c:49)
==14467==    by 0x80579C3: xheader_read (xheader.c:650)
==14467==    by 0x805D8D3: read_header_primitive (list.c:389)
==14467==    by 0x805DB49: read_header (list.c:469)
==14467==    by 0x805DC77: read_and (list.c:80)
==14467==    by 0x8064FFB: main (tar.c:2504)

which seems to be caused by xheader.c:647 - just removing 'xheader_init
(xhdr)' line as proposed in
https://bugzilla.redhat.com/attachment.cgi?id=357843 solves the leak.

That xheader_init() was added as part of factorization commit
http://git.savannah.gnu.org/cgit/tar.git/commit/?id=64cddf2fbc246e331edcbc82e419785af7f819a5 ,
but it is not clear why the initialization of obstack is done in
xheader_read function which uses only xhdr->buffer. Maybe done by
accident? It looks like it is safe to remove it, testsuite passes and
valgrind is silent... Or should be solved different way, Sergey?

Greetings,
         Ondřej Vašík


signature.asc (196 bytes) Download Attachment