Skip to content

retdec-fileinfo allocates 4 GB to read the debug directory of a 2.7 MB file #824

Closed
@s3rvac

Description

@s3rvac

retdec-fileinfo allocates 4 GB to read the debug directory of a 2.7 MB file.

Steps to reproduce

$ /usr/bin/time -v retdec-fileinfo FILE

where FILE is 022AFB79C539B23AECFAD315C7D9A712D747B521952184446026F7F2AA9005B8.

Expected output

retdec-fileinfo allocates a reasonable amount of memory to analyze the above 2.7 MB file.

Actual output

[..]
Maximum resident set size (kbytes): 4211072
[..]

which is around 4 GB of used RAM.

Analysis

Here is an output from valgrind --tool=massif (a heap profiler). Below, you can also find a screenshot from massif-visualizer:

022AFB79C53-massif-visualizer

As can be seen from the output, in DebugDirectory::read(), a std::vector is resized to 4 GB. This happens in src/pelib/DebugDirectory.cpp on line 49:

47             // Load the debug info data from the file, not from the image.
48             // Some samples may have debug info part of the overlay
49             debugEntry.data.resize(debugEntry.idd.SizeOfData);

For the above file, debugEntry.idd.SizeOfData is 4294967295 (UINT_MAX).

Notes

  • I suggest verifying whether there is an overflow (the value would suggest that).
  • When fixing the issue, please add the file into our regression-tests suite. We can just check that the analysis finishes successfully. We will at least have this file in the test suite.

My configuration

  • Current master (commit 956b1a3)
  • 64b Debian, GCC 9, Debug build

Metadata

Metadata

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions