PR27952, Disallow ET_DYN DF_1_PIE linker input
This patch adds a new elf_tdata flag, is_pie, set during the linker's open_input_bfds processing. The flag is then used to reject attempts to link a PIE as if it were a shared library. bfd/ PR 27952 * elf-bfd.h (struct elf_obj_tdata): Add is_pie. * elflink.c (elf_link_add_object_symbols): Set is_pie. ld/ PR 27952 * ldelf.c (ldelf_after_open): Error on input PIEs too.
This commit is contained in:
parent
860cc54cd4
commit
f64b9b13ce
5 changed files with 19 additions and 1 deletions
|
@ -1,3 +1,9 @@
|
|||
2021-06-11 Alan Modra <amodra@gmail.com>
|
||||
|
||||
PR 27952
|
||||
* elf-bfd.h (struct elf_obj_tdata): Add is_pie.
|
||||
* elflink.c (elf_link_add_object_symbols): Set is_pie.
|
||||
|
||||
2021-06-09 Nick Clifton <nickc@redhat.com>
|
||||
|
||||
PR 27666
|
||||
|
|
|
@ -2080,6 +2080,9 @@ struct elf_obj_tdata
|
|||
symbols. */
|
||||
unsigned int bad_symtab : 1;
|
||||
|
||||
/* Set if DT_FLAGS_1 has DF_1_PIE set. */
|
||||
unsigned int is_pie : 1;
|
||||
|
||||
/* Information grabbed from an elf core file. */
|
||||
struct core_elf_obj_tdata *core;
|
||||
|
||||
|
|
|
@ -4349,6 +4349,8 @@ elf_link_add_object_symbols (bfd *abfd, struct bfd_link_info *info)
|
|||
unsigned int tagv = dyn.d_un.d_val;
|
||||
audit = bfd_elf_string_from_elf_section (abfd, shlink, tagv);
|
||||
}
|
||||
if (dyn.d_tag == DT_FLAGS_1)
|
||||
elf_tdata (abfd)->is_pie = (dyn.d_un.d_val & DF_1_PIE) != 0;
|
||||
}
|
||||
|
||||
free (dynbuf);
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
2021-06-11 Alan Modra <amodra@gmail.com>
|
||||
|
||||
PR 27952
|
||||
* ldelf.c (ldelf_after_open): Error on input PIEs too.
|
||||
|
||||
2021-06-09 Nick Clifton <nickc@redhat.com>
|
||||
|
||||
PR 27666
|
||||
|
|
|
@ -1048,7 +1048,9 @@ ldelf_after_open (int use_libpath, int native, int is_linux, int is_freebsd,
|
|||
&& 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)
|
||||
&& (elf_tdata (abfd)->elf_header->e_type == ET_EXEC
|
||||
|| (elf_tdata (abfd)->elf_header->e_type == ET_DYN
|
||||
&& elf_tdata (abfd)->is_pie)))
|
||||
einfo (_("%F%P: cannot use executable file '%pB' as input to a link\n"),
|
||||
abfd);
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue