This is the mail archive of the
glibc-cvs@sourceware.org
mailing list for the glibc project.
GNU C Library master sources branch master updated. glibc-2.23-411-gf06f3f0
- From: fw at sourceware dot org
- To: glibc-cvs at sourceware dot org
- Date: 1 Jun 2016 05:47:15 -0000
- Subject: GNU C Library master sources branch master updated. glibc-2.23-411-gf06f3f0
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU C Library master sources".
The branch, master has been updated
via f06f3f05b48c72e2c9b0fa78671f94fd22d67da8 (commit)
from 7838d298d895f65247fb6b498db03a4336fc0506 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
http://sourceware.org/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=f06f3f05b48c72e2c9b0fa78671f94fd22d67da8
commit f06f3f05b48c72e2c9b0fa78671f94fd22d67da8
Author: Florian Weimer <fweimer@redhat.com>
Date: Wed Jun 1 07:14:42 2016 +0200
fork in libpthread cannot use IFUNC resolver [BZ #19861]
This commit only addresses the fork case, the vfork case has to be a
tail call, which is why the generic code needs an IFUNC resolver
there.
diff --git a/ChangeLog b/ChangeLog
index d1a3489..7dfe575 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+2016-06-01 Florian Weimer <fweimer@redhat.com>
+
+ [BZ #19861]
+ Do not use IFUNC resolver with potentially unrelocated symbol.
+ * nptl/pt-fork.c [HAVE_IFUNC]: Remove.
+ (DEFINE_FORK): Remove macro and inline definition.
+ (fork_alias): Renamed from fork_ifunc.
+ (__fork_alias): Renamed from __fork_ifunc.
+
2016-05-30 Paul Pluzhnikov <ppluzhnikov@google.com>
[BZ 19653]
diff --git a/nptl/pt-fork.c b/nptl/pt-fork.c
index b65d6b4..db9b61d 100644
--- a/nptl/pt-fork.c
+++ b/nptl/pt-fork.c
@@ -25,33 +25,14 @@
the historical ABI requires it. For static linking, there is no need to
provide anything here--the libc version will be linked in. For shared
library ABI compatibility, there must be __fork and fork symbols in
- libpthread.so; so we define them using IFUNC to redirect to the libc
- function. */
+ libpthread.so.
-#if SHLIB_COMPAT (libpthread, GLIBC_2_0, GLIBC_2_22)
-
-# if HAVE_IFUNC
-
-static __typeof (fork) *
-__attribute__ ((used))
-fork_resolve (void)
-{
- return &__libc_fork;
-}
+ With an IFUNC resolver, it would be possible to avoid the
+ indirection, but the IFUNC resolver might run before the
+ __libc_fork symbol has been relocated, in which case the IFUNC
+ resolver would not be able to provide the correct address. */
-# ifdef HAVE_ASM_SET_DIRECTIVE
-# define DEFINE_FORK(name) \
- asm (".set " #name ", fork_resolve\n" \
- ".globl " #name "\n" \
- ".type " #name ", %gnu_indirect_function");
-# else
-# define DEFINE_FORK(name) \
- asm (#name " = fork_resolve\n" \
- ".globl " #name "\n" \
- ".type " #name ", %gnu_indirect_function");
-# endif
-
-# else /* !HAVE_IFUNC */
+#if SHLIB_COMPAT (libpthread, GLIBC_2_0, GLIBC_2_22)
static pid_t __attribute__ ((used))
fork_compat (void)
@@ -59,14 +40,10 @@ fork_compat (void)
return __libc_fork ();
}
-# define DEFINE_FORK(name) strong_alias (fork_compat, name)
-
-# endif /* HAVE_IFUNC */
-
-DEFINE_FORK (fork_ifunc)
-compat_symbol (libpthread, fork_ifunc, fork, GLIBC_2_0);
+strong_alias (fork_compat, fork_alias)
+compat_symbol (libpthread, fork_alias, fork, GLIBC_2_0);
-DEFINE_FORK (__fork_ifunc)
-compat_symbol (libpthread, __fork_ifunc, __fork, GLIBC_2_0);
+strong_alias (fork_compat, __fork_alias)
+compat_symbol (libpthread, __fork_alias, __fork, GLIBC_2_0);
#endif
-----------------------------------------------------------------------
Summary of changes:
ChangeLog | 9 +++++++++
nptl/pt-fork.c | 43 ++++++++++---------------------------------
2 files changed, 19 insertions(+), 33 deletions(-)
hooks/post-receive
--
GNU C Library master sources