forked from Imagelibrary/binutils-gdb
Fix a potential illegal memory access when testing for a special LTO symbol name.
bfd * linker.c (_bfd_generic_link_add_one_symbol): Test for a NULL name before checking to see if the symbol is __gnu_lto_slim. * archive.c (_bfd_compute_and_write_armap): Likewise. binutils * nm.c (filter_symbols): Test for a NULL name before checking to see if the symbol is __gnu_lto_slim. * objcopy.c (filter_symbols): Likewise.
This commit is contained in:
@@ -1,3 +1,9 @@
|
||||
2021-10-19 Nick Clifton <nickc@redhat.com>
|
||||
|
||||
* linker.c (_bfd_generic_link_add_one_symbol): Test for a NULL
|
||||
name before checking to see if the symbol is __gnu_lto_slim.
|
||||
* archive.c (_bfd_compute_and_write_armap): Likewise.
|
||||
|
||||
2021-09-27 Nick Alcock <nick.alcock@oracle.com>
|
||||
|
||||
* configure: Regenerate.
|
||||
|
||||
@@ -2357,7 +2357,8 @@ _bfd_compute_and_write_armap (bfd *arch, unsigned int elength)
|
||||
map = new_map;
|
||||
}
|
||||
|
||||
if (syms[src_count]->name[0] == '_'
|
||||
if (syms[src_count]->name != NULL
|
||||
&& syms[src_count]->name[0] == '_'
|
||||
&& syms[src_count]->name[1] == '_'
|
||||
&& strcmp (syms[src_count]->name
|
||||
+ (syms[src_count]->name[2] == '_'),
|
||||
|
||||
@@ -1420,6 +1420,7 @@ _bfd_generic_link_add_one_symbol (struct bfd_link_info *info,
|
||||
{
|
||||
row = COMMON_ROW;
|
||||
if (!bfd_link_relocatable (info)
|
||||
&& name != NULL
|
||||
&& name[0] == '_'
|
||||
&& name[1] == '_'
|
||||
&& strcmp (name + (name[2] == '_'), "__gnu_lto_slim") == 0)
|
||||
|
||||
@@ -1,3 +1,9 @@
|
||||
2021-10-19 Nick Clifton <nickc@redhat.com>
|
||||
|
||||
* nm.c (filter_symbols): Test for a NULL name before checking to
|
||||
see if the symbol is __gnu_lto_slim.
|
||||
* objcopy.c (filter_symbols): Likewise.
|
||||
|
||||
2021-09-30 Nick Clifton <nickc@redhat.com>
|
||||
|
||||
* objcopy.c (filter_symbols): Fail if attempting to dredefine
|
||||
|
||||
@@ -544,7 +544,8 @@ filter_symbols (bfd *abfd, bool is_dynamic, void *minisyms,
|
||||
if (sym == NULL)
|
||||
bfd_fatal (bfd_get_filename (abfd));
|
||||
|
||||
if (sym->name[0] == '_'
|
||||
if (sym->name != NULL
|
||||
&& sym->name[0] == '_'
|
||||
&& sym->name[1] == '_'
|
||||
&& strcmp (sym->name + (sym->name[2] == '_'), "__gnu_lto_slim") == 0
|
||||
&& report_plugin_err)
|
||||
|
||||
@@ -1542,7 +1542,8 @@ filter_symbols (bfd *abfd, bfd *obfd, asymbol **osyms,
|
||||
{
|
||||
char *new_name;
|
||||
|
||||
if (name[0] == '_'
|
||||
if (name != NULL
|
||||
&& name[0] == '_'
|
||||
&& name[1] == '_'
|
||||
&& strcmp (name + (name[2] == '_'), "__gnu_lto_slim") == 0)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user