Work around libselinux API deprecations & auto-sync with upstream branch master

- Add glibc-deprecated-selinux-makedb.patch and
  glibc-deprecated-selinux-nscd.patch to work around libselinux API
  deprecations.
- Drop glibc-rseq-disable.patch; rseq support removed upstream.

Upstream commit: ec2f1fddf29053957d061dfe310f106388472a4f

- libio: Remove __libc_readline_unlocked
- shadow: Implement fgetspent_r using __nss_fgetent_r
- pwd: Implement fgetpwent_r using __nss_fgetent_r
- gshadow: Implement fgetsgent_r using __nss_fgetent_r (bug 20338)
- grp: Implement fgetgrent_r using __nss_fgetent_r
- nss: Add __nss_fgetent_r
- libio: Add fseterr_unlocked for internal use
- nss_files: Use generic result pointer in parse_line
- nss_files: Consolidate line parse declarations in <nss_files.h>
- nss_compat: Do not use mmap to read database files (bug 26258)
- nss_files: Consolidate file opening in __nss_files_fopen
- Update powerpc-nofpu libm-test-ulps.
- Use MPFR 4.1.0 in build-many-glibcs.py.
- elf: Change TLS static surplus default back to 1664
- hurd: Fix longjmp check for sigstate
- hurd: Fix longjmp early in initialization
- manual: New signal and errno string functions are AS-safe
- AArch64: Improve strlen_asimd performance (bug 25824)
- Move <rpc/netdb.h> from sunrpc to inet
- en_US: Minimize changes to date_fmt (Bug 25923)
- Linux: Remove rseq support
- manual: Use Unicode instead HTML entities for characters (bug 19737)
- Add NEWS entry for CVE-2020-6096 (bug 25620)
- arm: remove string/tst-memmove-overflow XFAIL
- AArch64: Rename IS_ARES to IS_NEOVERSE_N1
- AArch64: Add optimized Q-register memcpy
- AArch64: Align ENTRY to a cacheline
- Correct timespec implementation [BZ #26232]
- Remove --enable-obsolete-rpc configure flag
- hurd: Fix build-many-glibcs.py
- x86: Support usable check for all CPU features
- string: Make tst-strerror/tst-strsignal unsupported if msgfmt is not installed
- malloc: Deprecate more hook-related functionality
- elf: Support at least 32-byte alignment in static dlopen
- x86: Remove __ASSEMBLER__ check in init-arch.h
- x86: Remove the unused __x86_prefetchw
- Documentation for ARC port
- build-many-glibcs.py: Enable ARC builds
- ARC: Build Infrastructure
- ARC: ABI lists
- ARC: Linux Startup and Dynamic Loading
- ARC: Linux ABI
- ARC: Linux Syscall Interface
- ARC: hardware floating point support
- ARC: math soft float support
- ARC: Atomics and Locking primitives
- ARC: Thread Local Storage support
- ARC: startup and dynamic linking code
- ARC: ABI Implementation
- Fix time/tst-cpuclock1 intermitent failures
- powerpc64: Fix calls when r2 is not used [BZ #26173]
- Add NEWS entry for Update to Unicode 13.0.0 [BZ #25819]
- Update i686 libm-test-ulps
- Fix memory leak in __printf_fp_l (bug 26215).
- Fix double free in __printf_fp_l (bug 26214).
- linux: Fix syscall list generation instructions
- sysv: linux: Add 64-bit time_t variant for shmctl
- sysvipc: Remove the linux shm-pad.h file
- sysvipc: Split out linux struct shmid_ds
- sysv: linux: Add 64-bit time_t variant for msgctl
- sysvipc: Remove the linux msq-pad.h file
- sysvipc: Split out linux struct semid_ds
- sysv: linux: Add 64-bit time_t variant for semctl
This commit is contained in:
Arjun Shankar 2020-07-21 15:09:22 +02:00
parent 1554837500
commit 3e8e5d3396
3 changed files with 76 additions and 131 deletions

View File

@ -1,125 +0,0 @@
Disable rseq integration until the Firefox sandbox supports rseq.
Sandbox is incompatible with rseq registration
<https://bugzilla.mozilla.org/show_bug.cgi?id=1651701>
diff --git a/elf/libc_early_init.c b/elf/libc_early_init.c
index 86da66d5e01af08f..fd779941e7180fb6 100644
--- a/elf/libc_early_init.c
+++ b/elf/libc_early_init.c
@@ -28,8 +28,9 @@ __libc_early_init (_Bool initial)
__ctype_init ();
/* Register rseq ABI to the kernel for the main program's libc. */
+ rseq_active_init ();
if (initial)
- rseq_register_current_thread ();
+ rseq_register_current_thread ();
/* Only the outer namespace is marked as single-threaded. */
__libc_single_threaded = initial;
diff --git a/sysdeps/unix/sysv/linux/Versions b/sysdeps/unix/sysv/linux/Versions
index f72741b7e5afb22a..a730077142f0e20a 100644
--- a/sysdeps/unix/sysv/linux/Versions
+++ b/sysdeps/unix/sysv/linux/Versions
@@ -171,6 +171,8 @@ libc {
__rseq_abi;
}
GLIBC_PRIVATE {
+ __rseq_active;
+
# functions used in other libraries
__syscall_rt_sigqueueinfo;
__open_nocancel;
diff --git a/sysdeps/unix/sysv/linux/rseq-internal.h b/sysdeps/unix/sysv/linux/rseq-internal.h
index 8f6772ca1deada89..acaf033be465facd 100644
--- a/sysdeps/unix/sysv/linux/rseq-internal.h
+++ b/sysdeps/unix/sysv/linux/rseq-internal.h
@@ -23,13 +23,29 @@
#include <kernel-features.h>
#include <stdio.h>
#include <sys/rseq.h>
+#include <unistd.h>
#ifdef RSEQ_SIG
+
+extern _Bool __rseq_active;
+
+static inline void
+rseq_active_init (void)
+{
+ __rseq_active = __access ("/etc/glibc.rseq.enabled", F_OK) == 0;
+}
+
static inline void
rseq_register_current_thread (void)
{
int ret;
+ if (!__rseq_active)
+ {
+ __rseq_abi.cpu_id = RSEQ_CPU_ID_REGISTRATION_FAILED;
+ return;
+ }
+
if (__rseq_abi.cpu_id != RSEQ_CPU_ID_UNINITIALIZED)
__libc_fatal ("glibc fatal error: "
"rseq already initialized for this thread\n");
@@ -64,6 +80,11 @@ rseq_register_current_thread (void)
}
}
#else /* RSEQ_SIG */
+static inline void
+rseq_active_init (void)
+{
+}
+
static inline void
rseq_register_current_thread (void)
{
diff --git a/sysdeps/unix/sysv/linux/rseq-sym.c b/sysdeps/unix/sysv/linux/rseq-sym.c
index 090093408f1a4b3f..78d3a9dd8355436b 100644
--- a/sysdeps/unix/sysv/linux/rseq-sym.c
+++ b/sysdeps/unix/sysv/linux/rseq-sym.c
@@ -19,8 +19,11 @@
#include <stdint.h>
#include <kernel-features.h>
#include <sys/rseq.h>
+#include <rseq-internal.h>
__thread struct rseq __rseq_abi =
{
.cpu_id = RSEQ_CPU_ID_UNINITIALIZED,
};
+
+_Bool __rseq_active __attribute__ ((nocommon));
diff --git a/sysdeps/unix/sysv/linux/tst-rseq-nptl.c b/sysdeps/unix/sysv/linux/tst-rseq-nptl.c
index 5e788dcfa9eef8ef..ed846e9f5d5a5f4e 100644
--- a/sysdeps/unix/sysv/linux/tst-rseq-nptl.c
+++ b/sysdeps/unix/sysv/linux/tst-rseq-nptl.c
@@ -250,6 +250,10 @@ do_rseq_test (void)
static int
do_test (void)
{
+ extern _Bool __rseq_active;
+ if (!__rseq_active)
+ FAIL_UNSUPPORTED ("/etc/glibc.rseq.enabled missing, test disabled");
+
return do_rseq_test ();
}
diff --git a/sysdeps/unix/sysv/linux/tst-rseq.c b/sysdeps/unix/sysv/linux/tst-rseq.c
index aa902fb26a64f917..60eaab4bc13d1275 100644
--- a/sysdeps/unix/sysv/linux/tst-rseq.c
+++ b/sysdeps/unix/sysv/linux/tst-rseq.c
@@ -57,6 +57,10 @@ do_rseq_test (void)
static int
do_test (void)
{
+ extern _Bool __rseq_active;
+ if (!__rseq_active)
+ FAIL_UNSUPPORTED ("/etc/glibc.rseq.enabled missing, test disabled");
+
do_rseq_test ();
return 0;
}

View File

@ -1,4 +1,4 @@
%define glibcsrcdir glibc-2.31.9000-683-gffb17e7ba3
%define glibcsrcdir glibc-2.31.9000-746-gec2f1fddf2
%define glibcversion 2.31.9000
# Pre-release tarballs are pulled in from git using a command that is
# effectively:
@ -96,7 +96,7 @@
Summary: The GNU libc libraries
Name: glibc
Version: %{glibcversion}
Release: 19%{?dist}
Release: 20%{?dist}
# In general, GPLv2+ is used by programs, LGPLv2+ is used for
# libraries.
@ -167,9 +167,8 @@ Patch17: glibc-cs-path.patch
Patch18: glibc-c-utf8-locale.patch
Patch23: glibc-python3.patch
Patch29: glibc-fedora-nsswitch.patch
Patch30: glibc-rseq-disable.patch
Patch31: glibc-deprecated-selinux-makedb.patch
Patch32: glibc-deprecated-selinux-nscd.patch
Patch30: glibc-deprecated-selinux-makedb.patch
Patch31: glibc-deprecated-selinux-nscd.patch
##############################################################################
# Continued list of core "glibc" package information:
@ -2020,6 +2019,77 @@ fi
%files -f compat-libpthread-nonshared.filelist -n compat-libpthread-nonshared
%changelog
* Tue Jul 21 2020 Arjun Shankar <arjun@redhat.com> - 2.31.9000-20
- Add glibc-deprecated-selinux-makedb.patch and
glibc-deprecated-selinux-nscd.patch to work around libselinux API
deprecations.
- Drop glibc-rseq-disable.patch; rseq support removed upstream.
- Auto-sync with upstream branch master,
commit ec2f1fddf29053957d061dfe310f106388472a4f:
- libio: Remove __libc_readline_unlocked
- shadow: Implement fgetspent_r using __nss_fgetent_r
- pwd: Implement fgetpwent_r using __nss_fgetent_r
- gshadow: Implement fgetsgent_r using __nss_fgetent_r (bug 20338)
- grp: Implement fgetgrent_r using __nss_fgetent_r
- nss: Add __nss_fgetent_r
- libio: Add fseterr_unlocked for internal use
- nss_files: Use generic result pointer in parse_line
- nss_files: Consolidate line parse declarations in <nss_files.h>
- nss_compat: Do not use mmap to read database files (bug 26258)
- nss_files: Consolidate file opening in __nss_files_fopen
- Update powerpc-nofpu libm-test-ulps.
- Use MPFR 4.1.0 in build-many-glibcs.py.
- elf: Change TLS static surplus default back to 1664
- hurd: Fix longjmp check for sigstate
- hurd: Fix longjmp early in initialization
- manual: New signal and errno string functions are AS-safe
- AArch64: Improve strlen_asimd performance (bug 25824)
- Move <rpc/netdb.h> from sunrpc to inet
- en_US: Minimize changes to date_fmt (Bug 25923)
- Linux: Remove rseq support
- manual: Use Unicode instead HTML entities for characters (bug 19737)
- Add NEWS entry for CVE-2020-6096 (bug 25620)
- arm: remove string/tst-memmove-overflow XFAIL
- AArch64: Rename IS_ARES to IS_NEOVERSE_N1
- AArch64: Add optimized Q-register memcpy
- AArch64: Align ENTRY to a cacheline
- Correct timespec implementation [BZ #26232]
- Remove --enable-obsolete-rpc configure flag
- hurd: Fix build-many-glibcs.py
- x86: Support usable check for all CPU features
- string: Make tst-strerror/tst-strsignal unsupported if msgfmt is not installed
- malloc: Deprecate more hook-related functionality
- elf: Support at least 32-byte alignment in static dlopen
- x86: Remove __ASSEMBLER__ check in init-arch.h
- x86: Remove the unused __x86_prefetchw
- Documentation for ARC port
- build-many-glibcs.py: Enable ARC builds
- ARC: Build Infrastructure
- ARC: ABI lists
- ARC: Linux Startup and Dynamic Loading
- ARC: Linux ABI
- ARC: Linux Syscall Interface
- ARC: hardware floating point support
- ARC: math soft float support
- ARC: Atomics and Locking primitives
- ARC: Thread Local Storage support
- ARC: startup and dynamic linking code
- ARC: ABI Implementation
- Fix time/tst-cpuclock1 intermitent failures
- powerpc64: Fix calls when r2 is not used [BZ #26173]
- Add NEWS entry for Update to Unicode 13.0.0 [BZ #25819]
- Update i686 libm-test-ulps
- Fix memory leak in __printf_fp_l (bug 26215).
- Fix double free in __printf_fp_l (bug 26214).
- linux: Fix syscall list generation instructions
- sysv: linux: Add 64-bit time_t variant for shmctl
- sysvipc: Remove the linux shm-pad.h file
- sysvipc: Split out linux struct shmid_ds
- sysv: linux: Add 64-bit time_t variant for msgctl
- sysvipc: Remove the linux msq-pad.h file
- sysvipc: Split out linux struct semid_ds
- sysv: linux: Add 64-bit time_t variant for semctl
* Fri Jul 10 2020 Florian Weimer <fweimer@redhat.com> - 2.31.9000-19
- Disable rseq registration by default to help Firefox (#1855729)

View File

@ -1 +1 @@
SHA512 (glibc-2.31.9000-683-gffb17e7ba3.tar.xz) = 103ff3c04de5dc149df93e5399de1630f6fff1b8d7f127881d6e530492b8b953a8064205ceecb311a77c0a10de3a5ab2056121fd1fa833a30327c6b1f08beacc
SHA512 (glibc-2.31.9000-746-gec2f1fddf2.tar.xz) = 8324ee622aae041ad66aac0dbf2e3dc8af735c5826cbd2186bd9dabbb5fc6b8ffd744f68629e1f3763ed1f6692167acd75a1b621a799ef3e753aa348fdd0b581