asan: out of memory in som_set_reloc_info

Sections without SEC_HAS_CONTENTS avoid the file size checks, and of
course it doesn't make sense to read such as the contents are all
zero.

	* som.c (som_set_reloc_info): Don't read sections without contents.
This commit is contained in:
Alan Modra 2023-10-24 15:22:00 +10:30
parent e3afa68558
commit 220be06018

View File

@ -5146,28 +5146,30 @@ som_set_reloc_info (unsigned char *fixup,
section contents. */
rptr->addend = var ('V');
if (rptr->addend == 0 && !section->contents)
{
/* Got to read the damn contents first. We don't
bother saving the contents (yet). Add it one
day if the need arises. */
bfd_byte *contents;
if (!bfd_malloc_and_get_section (section->owner, section,
&contents))
{
free (contents);
return (unsigned) -1;
}
section->contents = contents;
deallocate_contents = 1;
}
if (rptr->addend == 0
&& offset - var ('L') <= section->size
&& section->size - (offset - var ('L')) >= 4)
rptr->addend = bfd_get_32 (section->owner,
(section->contents
+ offset - var ('L')));
&& (section->flags & SEC_HAS_CONTENTS) != 0)
{
if (!section->contents)
{
/* Got to read the damn contents first. We don't
bother saving the contents (yet). Add it one
day if the need arises. */
bfd_byte *contents;
if (!bfd_malloc_and_get_section (section->owner,
section, &contents))
{
free (contents);
return (unsigned) -1;
}
section->contents = contents;
deallocate_contents = 1;
}
if (offset - var ('L') <= section->size
&& section->size - (offset - var ('L')) >= 4)
rptr->addend = bfd_get_32 (section->owner,
(section->contents
+ offset - var ('L')));
}
}
else
rptr->addend = var ('V');