Bug 24933 - Memory leak in elf_x86_64_get_synthetic_symtab
Summary: Memory leak in elf_x86_64_get_synthetic_symtab
Status: RESOLVED FIXED
Alias: None
Product: binutils
Classification: Unclassified
Component: binutils (show other bugs)
Version: 2.33
: P2 normal
Target Milestone: 2.33
Assignee: Alan Modra
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2019-08-23 08:05 UTC by Bowen Wang
Modified: 2019-08-23 10:03 UTC (History)
2 users (show)

See Also:
Host:
Target:
Build:
Last reconfirmed: 2019-08-23 00:00:00


Attachments
PoC input (14.96 KB, application/x-sharedlib)
2019-08-23 08:05 UTC, Bowen Wang
Details

Note You need to log in before you can comment on or make changes to this bug.
Description Bowen Wang 2019-08-23 08:05:27 UTC
Created attachment 11963 [details]
PoC input

There is a memory leak bug according to output of Valgrind.

This bug is found in git commit: 1aa7f807d239dc32433e5f10840cdc8e80824c64

Compile the target:
CFLAGS="-DFORTIFY_SOURCE=2 -fno-omit-frame-pointer -g -Wno-error" \
./configure \
--disable-shared --disable-gdb --disable-libdecnumber --disable-readline \
--disable-sim

To trigger the bug:
valgrind --leak-check=full ./objdump -d test-input

The output of Valgrind:    
==6416== Memcheck, a memory error detector
==6416== Copyright (C) 2002-2017, and GNU GPL'd, by Julian Seward et al.
==6416== Using Valgrind-3.14.0 and LibVEX; rerun with -h for copyright info
==6416== Command: ./objdump -d ../../objdump-input/input.15104
==6416== 
./objdump: warning: ../../objdump-input/input.15104 has a corrupt section with a size (8000258) larger than the file size

../../objdump-input/input.15104:     file format elf64-x86-64

./objdump: ../../objdump-input/input.15104: file truncated
==6416== 
==6416== HEAP SUMMARY:
==6416==     in use at exit: 447,435,832 bytes in 24 blocks
==6416==   total heap usage: 288 allocs, 264 frees, 715,909,380 bytes allocated
==6416== 
==6416== 776 bytes in 2 blocks are definitely lost in loss record 10 of 22
==6416==    at 0x483874F: malloc (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)
==6416==    by 0x1DAB2D: bfd_malloc (libbfd.c:275)
==6416==    by 0x1F3629: elf_x86_64_get_synthetic_symtab (elf64-x86-64.c:4727)
==6416==    by 0x171412: dump_bfd (objdump.c:4047)
==6416==    by 0x1716F1: display_object_bfd (objdump.c:4132)
==6416==    by 0x17195B: display_any_bfd (objdump.c:4222)
==6416==    by 0x1719CF: display_file (objdump.c:4243)
==6416==    by 0x17239A: main (objdump.c:4561)
==6416== 
==6416== 44,739,824 bytes in 1 blocks are possibly lost in loss record 20 of 22
==6416==    at 0x483874F: malloc (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)
==6416==    by 0x1DAB2D: bfd_malloc (libbfd.c:275)
==6416==    by 0x1F9356: _bfd_x86_elf_get_synthetic_symtab (elfxx-x86.c:2177)
==6416==    by 0x1F3C5F: elf_x86_64_get_synthetic_symtab (elf64-x86-64.c:4839)
==6416==    by 0x171412: dump_bfd (objdump.c:4047)
==6416==    by 0x1716F1: display_object_bfd (objdump.c:4132)
==6416==    by 0x17195B: display_any_bfd (objdump.c:4222)
==6416==    by 0x1719CF: display_file (objdump.c:4243)
==6416==    by 0x17239A: main (objdump.c:4561)
==6416== 
==6416== LEAK SUMMARY:
==6416==    definitely lost: 776 bytes in 2 blocks
==6416==    indirectly lost: 0 bytes in 0 blocks
==6416==      possibly lost: 44,739,824 bytes in 1 blocks
==6416==    still reachable: 402,695,232 bytes in 21 blocks
==6416==         suppressed: 0 bytes in 0 blocks
==6416== Reachable blocks (those to which a pointer was found) are not shown.
==6416== To see them, rerun with: --leak-check=full --show-leak-kinds=all
==6416== 
==6416== For counts of detected and suppressed errors, rerun with: -v
==6416== ERROR SUMMARY: 2 errors from 2 contexts (suppressed: 0 from 0)

The PoC input is attached.
Comment 1 Nick Clifton 2019-08-23 09:44:50 UTC
Hi Bowen

  Thanks for reporting this problem, but we are not going to fix it.
  Memory leaks for programs like objdump are unimportant.  The program
  always terminates, so the memory is always returned to the system.
  Plus the program does not stay resident for very long, so it will
  not consume system resources unreasonably.

Cheers
  Nick
Comment 2 Alan Modra 2019-08-23 09:51:14 UTC
Actually, I was in the middle of testing a patch.  This one is simple to fix.
Comment 3 Nick Clifton 2019-08-23 09:57:26 UTC
On 23/08/2019 10:51, amodra at gmail dot com wrote:

> Actually, I was in the middle of testing a patch.  This one is simple to fix.

Doh! :-)

Oh well ignore me then. :-)

Cheers
  Nick
Comment 4 Sourceware Commits 2019-08-23 10:02:39 UTC
The master branch has been updated by Alan Modra <amodra@sourceware.org>:

https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=2600d80ccd04666f28608364be74d7ee552977ae

commit 2600d80ccd04666f28608364be74d7ee552977ae
Author: Alan Modra <amodra@gmail.com>
Date:   Fri Aug 23 19:16:25 2019 +0930

    PR24933, Memory leak in elf_x86_64_get_synthetic_symtab
    
    	PR 24933
    	* elfxx-x86.c (_bfd_x86_elf_get_synthetic_symtab): Don't exit
    	on error without freeing plts[] contents.
Comment 5 Alan Modra 2019-08-23 10:03:40 UTC
Fixed.