mirror of
https://sourceware.org/git/glibc.git
synced 2024-12-25 04:01:10 +00:00
b5c45e8375
Currently, DT_TEXTREL is incompatible with IFUNC. When DT_TEXTREL or DF_TEXTREL is seen, the dynamic linker calls __mprotect on the segments with PROT_READ|PROT_WRITE before applying dynamic relocations. It leads to segfault when performing IFUNC resolution (which requires PROT_EXEC as well for the IFUNC resolver). This patch makes it call __mprotect with extra PROT_WRITE bit, which will keep the PROT_EXEC bit if exists, and thus fixes the segfault. FreeBSD rtld libexec/rtld-elf/rtld.c (reloc_textrel_prot) does the same. Checked on x86_64-linux-gnu, i686-linux-gnu, aarch64-linux-gnu, sparc64-linux-gnu, sparcv9-linux-gnu, and armv8-linux-gnueabihf. Adam J. Richte <adam_richter2004@yahoo.com> Adhemerval Zanella <adhemerval.zanella@linaro.org> Fangrui Song <maskray@google.com> [BZ #20480] * config.h.in (CAN_TEXTREL_IFUNC): New define. * configure.ac: Add check if linker supports textrel relocation with ifunc. * elf/dl-reloc.c (_dl_relocate_object): Use all required flags on DT_TEXTREL segments, not only PROT_READ and PROT_WRITE. * elf/Makefile (ifunc-pie-tests): Add tst-ifunc-textrel. (CFLAGS-tst-ifunc-textrel.c): New rule. * elf/tst-ifunc-textrel.c: New file.
152 lines
4.0 KiB
Plaintext
152 lines
4.0 KiB
Plaintext
# @configure_input@
|
|
# Don't edit this file. Put configuration parameters in configparms instead.
|
|
|
|
version = @VERSION@
|
|
release = @RELEASE@
|
|
|
|
# Installation prefixes.
|
|
install_root = $(DESTDIR)
|
|
prefix = @prefix@
|
|
exec_prefix = @exec_prefix@
|
|
datadir = @datadir@
|
|
libdir = @libdir@
|
|
slibdir = @libc_cv_slibdir@
|
|
rtlddir = @libc_cv_rtlddir@
|
|
complocaledir = @libc_cv_complocaledir@
|
|
sysconfdir = @libc_cv_sysconfdir@
|
|
libexecdir = @libexecdir@
|
|
rootsbindir = @libc_cv_rootsbindir@
|
|
infodir = @infodir@
|
|
includedir = @includedir@
|
|
datarootdir = @datarootdir@
|
|
localstatedir = @libc_cv_localstatedir@
|
|
localedir = @localedir@
|
|
multidir= @libc_cv_multidir@
|
|
|
|
# Should we use and build ldconfig?
|
|
use-ldconfig = @use_ldconfig@
|
|
|
|
# Maybe the `ldd' script must be rewritten.
|
|
ldd-rewrite-script = @ldd_rewrite_script@
|
|
|
|
# System configuration.
|
|
config-machine = @host_cpu@
|
|
base-machine = @base_machine@
|
|
config-vendor = @host_vendor@
|
|
config-os = @host_os@
|
|
config-sysdirs = @sysnames@
|
|
cflags-cpu = @libc_cv_cc_submachine@
|
|
asflags-cpu = @libc_cv_cc_submachine@
|
|
|
|
config-extra-cflags = @libc_extra_cflags@
|
|
config-extra-cppflags = @libc_extra_cppflags@
|
|
config-cflags-nofma = @libc_cv_cc_nofma@
|
|
|
|
defines = @DEFINES@
|
|
sysheaders = @sysheaders@
|
|
sysincludes = @SYSINCLUDES@
|
|
c++-sysincludes = @CXX_SYSINCLUDES@
|
|
c++-cstdlib-header = @CXX_CSTDLIB_HEADER@
|
|
c++-cmath-header = @CXX_CMATH_HEADER@
|
|
c++-bits-std_abs-h = @CXX_BITS_STD_ABS_H@
|
|
all-warnings = @all_warnings@
|
|
enable-werror = @enable_werror@
|
|
|
|
have-z-combreloc = @libc_cv_z_combreloc@
|
|
have-z-execstack = @libc_cv_z_execstack@
|
|
have-protected-data = @libc_cv_protected_data@
|
|
have-insert = @libc_cv_insert@
|
|
have-glob-dat-reloc = @libc_cv_has_glob_dat@
|
|
with-fp = @libc_cv_with_fp@
|
|
enable-timezone-tools = @enable_timezone_tools@
|
|
unwind-find-fde = @libc_cv_gcc_unwind_find_fde@
|
|
have-fpie = @libc_cv_fpie@
|
|
have-ssp = @libc_cv_ssp@
|
|
stack-protector = @stack_protector@
|
|
no-stack-protector = @no_stack_protector@
|
|
have-selinux = @have_selinux@
|
|
have-libaudit = @have_libaudit@
|
|
have-libcap = @have_libcap@
|
|
have-cc-with-libunwind = @libc_cv_cc_with_libunwind@
|
|
fno-unit-at-a-time = @fno_unit_at_a_time@
|
|
bind-now = @bindnow@
|
|
have-hash-style = @libc_cv_hashstyle@
|
|
use-default-link = @use_default_link@
|
|
output-format = @libc_cv_output_format@
|
|
have-cxx-thread_local = @libc_cv_cxx_thread_local@
|
|
have-loop-to-function = @libc_cv_cc_loop_to_function@
|
|
have-textrel_ifunc = @libc_cv_textrel_ifunc@
|
|
|
|
multi-arch = @multi_arch@
|
|
|
|
mach-interface-list = @mach_interface_list@
|
|
|
|
experimental-malloc = @experimental_malloc@
|
|
|
|
nss-crypt = @libc_cv_nss_crypt@
|
|
static-nss-crypt = @libc_cv_static_nss_crypt@
|
|
|
|
# Configuration options.
|
|
build-shared = @shared@
|
|
build-pic-default= @libc_cv_pic_default@
|
|
build-pie-default= @libc_cv_pie_default@
|
|
cc-pie-default= @libc_cv_cc_pie_default@
|
|
build-profile = @profile@
|
|
build-static-nss = @static_nss@
|
|
cross-compiling = @cross_compiling@
|
|
force-install = @force_install@
|
|
link-obsolete-rpc = @link_obsolete_rpc@
|
|
build-obsolete-nsl = @build_obsolete_nsl@
|
|
build-crypt = @build_crypt@
|
|
build-nscd = @build_nscd@
|
|
use-nscd = @use_nscd@
|
|
build-hardcoded-path-in-tests= @hardcoded_path_in_tests@
|
|
build-pt-chown = @build_pt_chown@
|
|
have-tunables = @have_tunables@
|
|
|
|
# Build tools.
|
|
CC = @CC@
|
|
CXX = @CXX@
|
|
BUILD_CC = @BUILD_CC@
|
|
CFLAGS = @CFLAGS@
|
|
CPPFLAGS-config = @CPPFLAGS@
|
|
CPPUNDEFS = @CPPUNDEFS@
|
|
extra-nonshared-cflags = @extra_nonshared_cflags@
|
|
ASFLAGS-config = @ASFLAGS_config@
|
|
AR = @AR@
|
|
NM = @NM@
|
|
MAKEINFO = @MAKEINFO@
|
|
AS = $(CC) -c
|
|
BISON = @BISON@
|
|
AUTOCONF = @AUTOCONF@
|
|
OBJDUMP = @OBJDUMP@
|
|
OBJCOPY = @OBJCOPY@
|
|
GPROF = @GPROF@
|
|
READELF = @READELF@
|
|
|
|
# Installation tools.
|
|
INSTALL = @INSTALL@
|
|
INSTALL_PROGRAM = @INSTALL_PROGRAM@
|
|
INSTALL_SCRIPT = @INSTALL_SCRIPT@
|
|
INSTALL_DATA = @INSTALL_DATA@
|
|
INSTALL_INFO = @INSTALL_INFO@
|
|
LN_S = @LN_S@
|
|
MSGFMT = @MSGFMT@
|
|
|
|
# Script execution tools.
|
|
BASH = @BASH_SHELL@
|
|
AWK = @AWK@
|
|
PERL = @PERL@
|
|
PYTHON = @PYTHON@
|
|
|
|
# Additional libraries.
|
|
LIBGD = @LIBGD@
|
|
|
|
# Package versions and bug reporting configuration.
|
|
PKGVERSION = @PKGVERSION@
|
|
PKGVERSION_TEXI = @PKGVERSION_TEXI@
|
|
REPORT_BUGS_TO = @REPORT_BUGS_TO@
|
|
REPORT_BUGS_TEXI = @REPORT_BUGS_TEXI@
|
|
|
|
# More variables may be inserted below by configure.
|