summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNiels Möller <nisse@lysator.liu.se>2015-09-02 22:09:01 +0200
committerNiels Möller <nisse@lysator.liu.se>2015-09-02 22:09:01 +0200
commit7b1bb3292d2527c73faa7b192dec86e13346467d (patch)
treebbe77df7dbabc013d6ef873d1c314e74dcedb867
parentd543eb69d5684c7b66502f5305b96e61813125a2 (diff)
downloadnettle-7b1bb3292d2527c73faa7b192dec86e13346467d.tar.gz
Disable use of ifunc.
-rw-r--r--ChangeLog5
-rw-r--r--fat-setup.h9
2 files changed, 14 insertions, 0 deletions
diff --git a/ChangeLog b/ChangeLog
index e67fae19..2425c82d 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2015-09-02 Niels Möller <nisse@lysator.liu.se>
+
+ * fat-setup.h: Disable use of ifunc, since it breaks dlopen with
+ RTLD_NOW.
+
2015-08-25 Niels Möller <nisse@lysator.liu.se>
* NEWS: Started on entries for Nettle-3.2.
diff --git a/fat-setup.h b/fat-setup.h
index 09e8c371..eb7166a7 100644
--- a/fat-setup.h
+++ b/fat-setup.h
@@ -77,6 +77,15 @@
# endif
#endif
+/* Disable use of ifunc for now. Problem is, there's no guarantee that
+ one can call any libc functions from the ifunc resolver. On x86 and
+ x86_64, the corresponding IRELATIVE relocs are supposed to be
+ processed last, but that doesn't seem to happen, and its a
+ platform-specific feature. To trigger problems, simply try dlopen
+ ("libnettle.so", RTLD_NOW), which crashes in an uninitialized plt
+ entry. */
+#undef HAVE_LINK_IFUNC
+
#if !HAVE_SECURE_GETENV
#define secure_getenv(s) NULL
#endif