diff options
author | Florian Weimer <fweimer@redhat.com> | 2022-03-11 08:23:56 +0100 |
---|---|---|
committer | Florian Weimer <fweimer@redhat.com> | 2022-03-11 08:24:19 +0100 |
commit | 9bdf92c79d63b42f931101bb6df87129c408b0c4 (patch) | |
tree | 7efd60fdfd80e687502c0bb1c7b511010153e7a4 /nss/Makefile | |
parent | aefc79ab5ad4bb9feea2876720cec70dca7cd8ed (diff) | |
download | glibc-9bdf92c79d63b42f931101bb6df87129c408b0c4.zip glibc-9bdf92c79d63b42f931101bb6df87129c408b0c4.tar.gz glibc-9bdf92c79d63b42f931101bb6df87129c408b0c4.tar.bz2 |
nss: Protect against errno changes in function lookup (bug 28953)
dlopen may clobber errno. The nss_test_errno module uses an ELF
constructor to achieve that, but there could be internal errors
during dlopen that cause this, too. Therefore, the NSS framework
has to guard against such errno clobbers.
__nss_module_get_function is currently the only function that calls
__nss_module_load, so it is sufficient to save and restore errno
around this call.
Reviewed-by: Carlos O'Donell <carlos@redhat.com>
Diffstat (limited to 'nss/Makefile')
-rw-r--r-- | nss/Makefile | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/nss/Makefile b/nss/Makefile index 74e2c24..de439d4 100644 --- a/nss/Makefile +++ b/nss/Makefile @@ -60,7 +60,8 @@ tests = test-netdb test-digits-dots tst-nss-getpwent bug17079 \ tst-nss-test1 \ tst-nss-test2 \ tst-nss-test4 \ - tst-nss-test5 + tst-nss-test5 \ + tst-nss-test_errno xtests = bug-erange tests-container = \ @@ -132,7 +133,7 @@ libnss_compat-inhibit-o = $(filter-out .os,$(object-suffixes)) ifeq ($(build-static-nss),yes) tests-static += tst-nss-static endif -extra-test-objs += nss_test1.os nss_test2.os +extra-test-objs += nss_test1.os nss_test2.os nss_test_errno.os include ../Rules @@ -166,19 +167,26 @@ rtld-tests-LDFLAGS += -Wl,--dynamic-list=nss_test.ver libof-nss_test1 = extramodules libof-nss_test2 = extramodules +libof-nss_test_errno = extramodules $(objpfx)/libnss_test1.so: $(objpfx)nss_test1.os $(link-libc-deps) $(build-module) $(objpfx)/libnss_test2.so: $(objpfx)nss_test2.os $(link-libc-deps) $(build-module) +$(objpfx)/libnss_test_errno.so: $(objpfx)nss_test_errno.os $(link-libc-deps) + $(build-module) $(objpfx)nss_test2.os : nss_test1.c # Use the nss_files suffix for these objects as well. $(objpfx)/libnss_test1.so$(libnss_files.so-version): $(objpfx)/libnss_test1.so $(make-link) $(objpfx)/libnss_test2.so$(libnss_files.so-version): $(objpfx)/libnss_test2.so $(make-link) +$(objpfx)/libnss_test_errno.so$(libnss_files.so-version): \ + $(objpfx)/libnss_test_errno.so + $(make-link) $(patsubst %,$(objpfx)%.out,$(tests) $(tests-container)) : \ $(objpfx)/libnss_test1.so$(libnss_files.so-version) \ - $(objpfx)/libnss_test2.so$(libnss_files.so-version) + $(objpfx)/libnss_test2.so$(libnss_files.so-version) \ + $(objpfx)/libnss_test_errno.so$(libnss_files.so-version) ifeq (yes,$(have-thread-library)) $(objpfx)tst-cancel-getpwuid_r: $(shared-thread-library) @@ -194,3 +202,4 @@ LDFLAGS-tst-nss-test2 = -Wl,--disable-new-dtags LDFLAGS-tst-nss-test3 = -Wl,--disable-new-dtags LDFLAGS-tst-nss-test4 = -Wl,--disable-new-dtags LDFLAGS-tst-nss-test5 = -Wl,--disable-new-dtags +LDFLAGS-tst-nss-test_errno = -Wl,--disable-new-dtags |