Re: PR25993, read of freed memory
authorAlan Modra <amodra@gmail.com>
Thu, 21 May 2020 14:04:58 +0000 (23:34 +0930)
committerAlan Modra <amodra@gmail.com>
Thu, 21 May 2020 14:09:36 +0000 (23:39 +0930)
commit0490dd41ae89e66efd8b3cee122c189a481269de
treeea591291023428f54453f894bfb51aa4daa961f2
parentd96bf37ba8360320db4d531008634b3f61af06f5
Re: PR25993, read of freed memory

git commit 7b958a48e132 put the bfd filename in the bfd objalloc
memory.  That means the filename is freed by _bfd_free_cached_info.
Which is called by _bfd_compute_and_write_armap to tidy up symbol
tables after they are done with.

Unfortunately, _bfd_write_archive_contents wants to seek and read from
archive elements after that point, and if the number of elements
exceeds max_open_files in cache.c then some of those elements will
have their files closed.  To reopen, you need the filename.

PR 25993
* opncls.c (_bfd_free_cached_info): Keep a copy of the bfd
filename.
(_bfd_delete_bfd): Free the copy.
(_bfd_new_bfd): Free nbfd->memory on error.
bfd/ChangeLog
bfd/opncls.c