about summary refs log tree commit diff
diff options
context:
space:
mode:
authorH.J. Lu <hjl.tools@gmail.com>2017-02-02 13:14:43 -0800
committerH.J. Lu <hjl.tools@gmail.com>2017-02-02 13:14:59 -0800
commit6fab532b4781b0bcb554fd5c2f2e6d5448343aff (patch)
tree702560c26b0818d6b0a92cb5d04dbaa60a9248df
parented8d5ffd0a14e84298a15ae2ec9b799010166b28 (diff)
downloadglibc-6fab532b4781b0bcb554fd5c2f2e6d5448343aff.tar.gz
glibc-6fab532b4781b0bcb554fd5c2f2e6d5448343aff.tar.xz
glibc-6fab532b4781b0bcb554fd5c2f2e6d5448343aff.zip
Allow IFUNC relocation against unrelocated shared library
IFUNC relocation against definition in unrelocated shared library
will lead to segfault when the IFUNC function is called.  This
patch allows such IFUNC relocations with a warning.  This isn't
a real fix for

https://sourceware.org/bugzilla/show_bug.cgi?id=21041

It simply allows the program to load.  The program will segfault
when longjmp is called.

	* sysdeps/i386/dl-machine.h (elf_machine_rel): Replace
	_dl_fatal_printf with _dl_error_printf for IFUNC relocation
	against unrelocated shared library.
	* sysdeps/x86_64/dl-machine.h (elf_machine_rela): Likewise.
-rw-r--r--ChangeLog7
-rw-r--r--sysdeps/i386/dl-machine.h2
-rw-r--r--sysdeps/x86_64/dl-machine.h2
3 files changed, 9 insertions, 2 deletions
diff --git a/ChangeLog b/ChangeLog
index a210e631f4..9b5b2eb908 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2017-02-02  H.J. Lu  <hongjiu.lu@intel.com>
+
+	* sysdeps/i386/dl-machine.h (elf_machine_rel): Replace
+	_dl_fatal_printf with _dl_error_printf for IFUNC relocation
+	against unrelocated shared library.
+	* sysdeps/x86_64/dl-machine.h (elf_machine_rela): Likewise.
+
 2017-02-02  Siddhesh Poyarekar  <siddhesh@sourceware.org>
 
 	* sysdeps/generic/unsecvars.h: Add GLIBC_TUNABLES.
diff --git a/sysdeps/i386/dl-machine.h b/sysdeps/i386/dl-machine.h
index 6eca69d567..99a72f68f4 100644
--- a/sysdeps/i386/dl-machine.h
+++ b/sysdeps/i386/dl-machine.h
@@ -329,7 +329,7 @@ elf_machine_rel (struct link_map *map, const Elf32_Rel *reloc,
 	    {
 	      const char *strtab
 		= (const char *) D_PTR (map, l_info[DT_STRTAB]);
-	      _dl_fatal_printf ("\
+	      _dl_error_printf ("\
 %s: Relink `%s' with `%s' for IFUNC symbol `%s'\n",
 				RTLD_PROGNAME, map->l_name,
 				sym_map->l_name,
diff --git a/sysdeps/x86_64/dl-machine.h b/sysdeps/x86_64/dl-machine.h
index 3e7ae22c67..daf4d8c070 100644
--- a/sysdeps/x86_64/dl-machine.h
+++ b/sysdeps/x86_64/dl-machine.h
@@ -339,7 +339,7 @@ elf_machine_rela (struct link_map *map, const ElfW(Rela) *reloc,
 	    {
 	      const char *strtab
 		= (const char *) D_PTR (map, l_info[DT_STRTAB]);
-	      _dl_fatal_printf ("\
+	      _dl_error_printf ("\
 %s: Relink `%s' with `%s' for IFUNC symbol `%s'\n",
 				RTLD_PROGNAME, map->l_name,
 				sym_map->l_name,