Have the linker fail if any attempt to link in an executable is made.

PR 26047
	* ldelf.c (ldelf_after_open): Fail if attempting to link one
	executable into another.  Ensure that the test is made for all
	forms of linking.
This commit is contained in:
Nick Clifton 2020-05-28 17:43:21 +01:00
parent a3fc941881
commit a87e1817a4
2 changed files with 14 additions and 2 deletions

View File

@ -2,7 +2,8 @@
PR 26047
* ldelf.c (ldelf_after_open): Fail if attempting to link one
executable into another.
executable into another. Ensure that the test is made for all
forms of linking.
2020-05-28 H.J. Lu <hongjiu.lu@intel.com>

View File

@ -1038,6 +1038,17 @@ ldelf_after_open (int use_libpath, int native, int is_linux, int is_freebsd,
get_elf_backend_data (link_info.output_bfd)->setup_gnu_properties (&link_info);
/* Do not allow executable files to be used as inputs to the link. */
for (abfd = link_info.input_bfds; abfd; abfd = abfd->link.next)
{
if (elf_tdata (abfd) != NULL
&& elf_tdata (abfd)->elf_header != NULL
/* FIXME: Maybe check for other non-supportable types as well ? */
&& elf_tdata (abfd)->elf_header->e_type == ET_EXEC)
einfo (_("%F%P: cannot use executable file '%pB' as input to a link\n"),
abfd);
}
if (bfd_link_relocatable (&link_info))
{
if (link_info.execstack == !link_info.noexecstack)
@ -1054,7 +1065,7 @@ ldelf_after_open (int use_libpath, int native, int is_linux, int is_freebsd,
}
return;
}
if (!link_info.traditional_format)
{
bfd *elfbfd = NULL;