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:
Nick Clifton
2021-10-19 16:02:49 +01:00
parent d4ef5e75c7
commit cf487499e0
6 changed files with 19 additions and 3 deletions

View File

@@ -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.

View File

@@ -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] == '_'),

View File

@@ -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)

View File

@@ -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

View File

@@ -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)

View File

@@ -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)
{