]> git.ipfire.org Git - thirdparty/glibc.git/log
thirdparty/glibc.git
6 months agoBump version to 2.41
Andreas K. Hüttel [Tue, 28 Jan 2025 17:25:13 +0000 (18:25 +0100)] 
Bump version to 2.41

Signed-off-by: Andreas K. Hüttel <dilfridge@gentoo.org>
6 months agopo: update translations (final, only timestamp and line number changes)
Andreas K. Hüttel [Tue, 28 Jan 2025 12:47:28 +0000 (13:47 +0100)] 
po: update translations (final, only timestamp and line number changes)

Signed-off-by: Andreas K. Hüttel <dilfridge@gentoo.org>
6 months agolibc.pot: regenerate (only line number changes)
Andreas K. Hüttel [Tue, 28 Jan 2025 11:36:07 +0000 (12:36 +0100)] 
libc.pot: regenerate (only line number changes)

Signed-off-by: Andreas K. Hüttel <dilfridge@gentoo.org>
6 months agoINSTALL: update last tested version numbers
Andreas K. Hüttel [Tue, 28 Jan 2025 11:31:08 +0000 (12:31 +0100)] 
INSTALL: update last tested version numbers

Signed-off-by: Andreas K. Hüttel <dilfridge@gentoo.org>
6 months agocontrib.texi: minor improvements
Andreas K. Hüttel [Mon, 27 Jan 2025 15:30:54 +0000 (16:30 +0100)] 
contrib.texi: minor improvements

Mention CORE-MATH developers by name
Fix accent

Signed-off-by: Andreas K. Hüttel <dilfridge@gentoo.org>
6 months agoNEWS: Add some more news from the 2.41 cycle
Andreas K. Hüttel [Sun, 26 Jan 2025 21:45:27 +0000 (22:45 +0100)] 
NEWS: Add some more news from the 2.41 cycle

Signed-off-by: Andreas K. Hüttel <dilfridge@gentoo.org>
Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
6 months agocontrib.texi: Update from 2.40..2.41 commit log
Andreas K. Hüttel [Mon, 27 Jan 2025 00:06:16 +0000 (01:06 +0100)] 
contrib.texi: Update from 2.40..2.41 commit log

Signed-off-by: Andreas K. Hüttel <dilfridge@gentoo.org>
6 months agoNEWS: Add reference to (single) advisory
Andreas K. Hüttel [Sun, 26 Jan 2025 22:30:13 +0000 (23:30 +0100)] 
NEWS: Add reference to (single) advisory

Signed-off-by: Andreas K. Hüttel <dilfridge@gentoo.org>
6 months agoNEWS: Add list of bugs fixed in 2.41
Andreas K. Hüttel [Sun, 26 Jan 2025 22:26:07 +0000 (23:26 +0100)] 
NEWS: Add list of bugs fixed in 2.41

Signed-off-by: Andreas K. Hüttel <dilfridge@gentoo.org>
6 months agoNEWS: editorial changes (language, line breaks)
Andreas K. Hüttel [Sun, 26 Jan 2025 19:09:26 +0000 (20:09 +0100)] 
NEWS: editorial changes (language, line breaks)

Signed-off-by: Andreas K. Hüttel <dilfridge@gentoo.org>
6 months agotestsuite: Make stdio-common/tst-printf-format-*-mem UNSUPPORTED if the mtrace output...
Xi Ruoyao [Sat, 25 Jan 2025 16:48:27 +0000 (00:48 +0800)] 
testsuite: Make stdio-common/tst-printf-format-*-mem UNSUPPORTED if the mtrace output does not exist

When gawk was not built with MPFR, there's no mtrace output and those
tests FAIL.  But we should make them UNSUPPORTED like other
tst-printf-format-* tests in the case.

Signed-off-by: Xi Ruoyao <xry111@xry111.site>
Reviewed-by: Sam James <sam@gentoo.org>
Reviewed-by: Andreas K Hüttel <dilfridge@gentoo.org>
6 months agoelf: fix 'valgrind' typo in comment
Sam James [Sat, 25 Jan 2025 05:34:20 +0000 (05:34 +0000)] 
elf: fix 'valgrind' typo in comment

6 months agomalloc: cleanup casts in tst-calloc
Sam James [Mon, 13 Jan 2025 02:27:41 +0000 (02:27 +0000)] 
malloc: cleanup casts in tst-calloc

Followup to c3d1dac96bdd10250aa37bb367d5ef8334a093a1. As pointed out by
Maciej W. Rozycki, the casts are obviously useless now.

Reviewed-by: H.J. Lu <hjl.tools@gmail.com>
6 months agostdlib: Test using setenv with updated environ [BZ #32588]
H.J. Lu [Fri, 24 Jan 2025 10:53:13 +0000 (18:53 +0800)] 
stdlib: Test using setenv with updated environ [BZ #32588]

Add a test for setenv with updated environ.  Verify that BZ #32588 is
fixed.

Signed-off-by: H.J. Lu <hjl.tools@gmail.com>
Reviewed-by: Florian Weimer <fweimer@redhat.com>
6 months agoLICENSES: update CORE-MATH copyright
Aurelien Jarno [Wed, 22 Jan 2025 21:11:24 +0000 (22:11 +0100)] 
LICENSES: update CORE-MATH copyright

Many more files from the CORE-MATH have been added. Also update the
authors and copyright years.

Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
6 months agoLICENSES: update location of getaddrinfo.c and getnameinfo.c
Aurelien Jarno [Wed, 22 Jan 2025 21:11:24 +0000 (22:11 +0100)] 
LICENSES: update location of getaddrinfo.c and getnameinfo.c

posix/getaddrinfo.c got moved into nss/getaddrinfo.c in commit
7f602256ab5b ("Move getaddrinfo from 'posix' into 'nss'")

inet/getnameinfo.c got moved into nss/getnameinfo.c in commit
2f1c 6652 d7b3 ("Move getnameinfo from 'inet' to 'nss'")

Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
6 months agoLICENSES: remove Intel License Agreement
Aurelien Jarno [Wed, 22 Jan 2025 21:11:24 +0000 (22:11 +0100)] 
LICENSES: remove Intel License Agreement

The corresponding files are gone with the IA64 removal in commit
460860f457e2 ("Remove ia64-linux-gnu").

Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
6 months agostdlib: Re-implement free (environ) compatibility kludge for setenv
Florian Weimer [Fri, 24 Jan 2025 09:40:28 +0000 (10:40 +0100)] 
stdlib: Re-implement free (environ) compatibility kludge for setenv

For the originally failing application (userhelper from usermode),
it is not actually necessary to call realloc on the environ
pointer.  Yes, there will be a memory leak because the application
assigns a heap-allocated pointer to environ that it never frees,
but this leak was always there: the old realloc-based setenv had
a hidden internal variable, last_environ, that was used in a similar
way to __environ_array_list.  The application is not impacted by
the leak anyway because the relevant operations do not happen in
a loop.

The change here just uses a separte heap allocation and points
environ to that.  This means that if an application calls
free (environ) and restores the environ pointer to the value
at process start, and does not modify the environment further,
nothing bad happens.

This change should not invalidate any previous testing that went into
the original getenv thread safety change, commit 7a61e7f557a97ab597d6
("stdlib: Make getenv thread-safe in more cases").

The new test cases are modeled in part on the env -i use case from
bug 32588 (with !DO_MALLOC && !DO_EARLY_SETENV), and the previous
stdlib/tst-setenv-malloc test.  The DO_MALLOC && !DO_EARLY_SETENV
case in the new test should approximate what userhelper from the
usermode package does.

Reviewed-by: Carlos O'Donell <carlos@redhat.com>
6 months agoRevert "stdlib: Support malloc-managed environ arrays for compatibility"
Florian Weimer [Fri, 24 Jan 2025 07:04:23 +0000 (08:04 +0100)] 
Revert "stdlib: Support malloc-managed environ arrays for compatibility"

This reverts commit b62759db04b8ed7f829c06f1d7c3b8fb70616493.

Reason for revert: Incompatible with “env -i” and coreutils (bug 32588).

Reviewed-by: H.J. Lu <hjl.tools@gmail.com>
6 months agostdlib: Support malloc-managed environ arrays for compatibility
Florian Weimer [Wed, 22 Jan 2025 12:48:56 +0000 (13:48 +0100)] 
stdlib: Support malloc-managed environ arrays for compatibility

Some applications set environ to a heap-allocated pointer, call
setenv (expecting it to call realloc), free environ, and then
restore the original environ pointer.  This breaks after
commit 7a61e7f557a97ab597d6fca5e2d1f13f65685c61 ("stdlib: Make
getenv thread-safe in more cases") because after the setenv call,
the environ pointer does not point to the start of a heap allocation.
Instead, setenv creates a separate allocation and changes environ
to point into that.  This means that the free call in the application
results in heap corruption.

The interim approach was more compatible with other libcs because
it does not assume that the incoming environ pointer is allocated
as if by malloc (if it was written by the application).  However,
it seems to be more important to stay compatible with previous
glibc version: assume the incoming pointer is heap allocated,
and preserve this property after setenv calls.

Reviewed-by: Carlos O'Donell <carlos@redhat.com>
6 months agopo: Incorporate translations
Andreas K. Hüttel [Wed, 22 Jan 2025 21:50:23 +0000 (22:50 +0100)] 
po: Incorporate translations

be ca cs da de el eo es fi fr gl hr hu ia id it ja ka ko lt nb nl pl pt ro ru rw sk sl sr sv tr uk vi zh_CN zh_TW

Signed-off-by: Andreas K. Hüttel <dilfridge@gentoo.org>
6 months agoUpdate advisory GLIBC-SA-2025-0001 (2.40)
Siddhesh Poyarekar [Wed, 22 Jan 2025 14:40:52 +0000 (09:40 -0500)] 
Update advisory GLIBC-SA-2025-0001 (2.40)

Signed-off-by: Siddhesh Poyarekar <siddhesh@sourceware.org>
6 months agoAdd advisory text for CVE-2025-0395
Siddhesh Poyarekar [Tue, 21 Jan 2025 21:48:29 +0000 (16:48 -0500)] 
Add advisory text for CVE-2025-0395

Signed-off-by: Siddhesh Poyarekar <siddhesh@sourceware.org>
Reviewed: Adhemerval Zanella  <adhemerval.zanella@linaro.org>

6 months agoFix underallocation of abort_msg_s struct (CVE-2025-0395)
Siddhesh Poyarekar [Tue, 21 Jan 2025 21:11:06 +0000 (16:11 -0500)] 
Fix underallocation of abort_msg_s struct (CVE-2025-0395)

Include the space needed to store the length of the message itself, in
addition to the message string.  This resolves BZ #32582.

Signed-off-by: Siddhesh Poyarekar <siddhesh@sourceware.org>
Reviewed: Adhemerval Zanella  <adhemerval.zanella@linaro.org>

6 months agoNEWS: Add note on Guarded Control Stack support
Yury Khrustalev [Tue, 21 Jan 2025 13:44:05 +0000 (13:44 +0000)] 
NEWS: Add note on Guarded Control Stack support

Reviewed-by: Andreas K. Huettel <dilfridge@gentoo.org>
6 months agoFix typo: _POSIX_REATIME_SIGNALS -> _POSIX_REALTIME_SIGNALS [BZ# 32515]
Paul Pluzhnikov [Mon, 20 Jan 2025 21:47:38 +0000 (21:47 +0000)] 
Fix typo: _POSIX_REATIME_SIGNALS -> _POSIX_REALTIME_SIGNALS [BZ# 32515]

Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
6 months agoaarch64: Add HWCAP_GCS
Yury Khrustalev [Tue, 21 Jan 2025 09:39:45 +0000 (09:39 +0000)] 
aarch64: Add HWCAP_GCS

Use upper 32 bits of HWCAP.

Reviewed-by: Andreas K. Huettel <dilfridge@gentoo.org>
6 months agonptl: Include <stdbool.h> in tst-skeleton-affinity-inheritance.c
Florian Weimer [Tue, 21 Jan 2025 09:36:58 +0000 (10:36 +0100)] 
nptl: Include <stdbool.h> in tst-skeleton-affinity-inheritance.c

The file uses the identifiers bool, false, true.

6 months agostdlib: Test for expected sequence of random numbers from rand
Florian Weimer [Mon, 20 Jan 2025 20:06:59 +0000 (21:06 +0100)] 
stdlib: Test for expected sequence of random numbers from rand

As the test comment explains, this test is not quite valid, but
preserving the exact sequences helps distributions to port to
newer glibc versions.  We can remove this test if we ever switch
to a different implementation.

Reviewed-by: Noah Goldstein <goldstein.w.n@gmail.com>
6 months agostdlib: Fix unintended change to the random_r implementation
Florian Weimer [Mon, 20 Jan 2025 20:06:43 +0000 (21:06 +0100)] 
stdlib: Fix unintended change to the random_r implementation

Commit d5bceac99d24af1131b90027dab267e437b65cd1 changed the sequence
of random numbers.  This was completely unintended.  The statistical
properties of the new sequences are unclear, so restore the old
behavior.

Fixes commit d5bceac99d24af1131b90027dab267e437b65cd1 ("stdlib:
random_r: fix unaligned access in initstate and initstate_r
[BZ #30584]").

Reviewed-by: Noah Goldstein <goldstein.w.n@gmail.com>
6 months agoelf: Make tst-ro-dynamic-mod.map compatible with older binutils
Florian Weimer [Mon, 20 Jan 2025 19:35:10 +0000 (20:35 +0100)] 
elf: Make tst-ro-dynamic-mod.map compatible with older binutils

Older versions such as binutils 2.35.2 do not recognize
PT_GNU_PROPERTY.

Fixes commit d3f2b71ef1d146137a25dd1367d97a14fac341c6
("aarch64: Fix tests not compatible with targets supporting GCS").

6 months agoNEWS: Add the extensible rseq ABI to new features
Michael Jeanson [Tue, 14 Jan 2025 20:03:56 +0000 (15:03 -0500)] 
NEWS: Add the extensible rseq ABI to new features

Signed-off-by: Michael Jeanson <mjeanson@efficios.com>
Reviewed-by: Florian Weimer <fweimer@redhat.com>
6 months agoLinux: Do not check unused bytes after sched_getattr in tst-sched_setattr
Florian Weimer [Mon, 20 Jan 2025 08:57:09 +0000 (09:57 +0100)] 
Linux: Do not check unused bytes after sched_getattr in tst-sched_setattr

Linux 6.13 was released with a change that overwrites those bytes.
This means that the check_unused subtest fails.

Update the manual accordingly.

Tested-by: Xi Ruoyao <xry111@xry111.site>
Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
6 months agoi386: Update ulps for *pi functions
Florian Weimer [Mon, 20 Jan 2025 10:33:58 +0000 (11:33 +0100)] 
i386: Update ulps for *pi functions

As seen with GCC 11.5 on an AMD Ryzen 9 7950X CPU, with an
-fpmath=sse, --disable-multi-arch build of glibc.

6 months agoaarch64: Fix tests not compatible with targets supporting GCS
Yury Khrustalev [Tue, 26 Nov 2024 11:38:30 +0000 (11:38 +0000)] 
aarch64: Fix tests not compatible with targets supporting GCS

 - Add GCS marking to some of the tests when target supports GCS
 - Fix tst-ro-dynamic-mod.map linker script to avoid removing
   GNU properties
 - Add header with macros for GNU properties

Reviewed-by: Wilco Dijkstra <Wilco.Dijkstra@arm.com>
6 months agoaarch64: Use __alloc_gcs in makecontext
Szabolcs Nagy [Wed, 28 Aug 2024 10:00:19 +0000 (11:00 +0100)] 
aarch64: Use __alloc_gcs in makecontext

Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
6 months agoaarch64: Add GCS user-space allocation logic
Szabolcs Nagy [Wed, 28 Aug 2024 10:21:19 +0000 (11:21 +0100)] 
aarch64: Add GCS user-space allocation logic

Allocate GCS based on the stack size, this can be used for coroutines
(makecontext) and thread creation (if the kernel allows user allocated
GCS).

Reviewed-by: Wilco Dijkstra <Wilco.Dijkstra@arm.com>
6 months agoaarch64: Process gnu properties in static exe
Szabolcs Nagy [Wed, 27 Dec 2023 17:17:11 +0000 (17:17 +0000)] 
aarch64: Process gnu properties in static exe

Unlike for BTI, the kernel does not process GCS properties so update
GL(dl_aarch64_gcs) before the GCS status is set.

Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
6 months agoaarch64: Ignore GCS property of ld.so
Szabolcs Nagy [Wed, 10 Jan 2024 16:20:24 +0000 (16:20 +0000)] 
aarch64: Ignore GCS property of ld.so

check_gcs is called for each dependency of a DSO, but the GNU property
of the ld.so is not processed so ldso->l_mach.gcs may not be correct.
Just assume ld.so is GCS compatible independently of the ELF marking.

Reviewed-by: Wilco Dijkstra <Wilco.Dijkstra@arm.com>
6 months agoaarch64: Handle GCS marking
Szabolcs Nagy [Thu, 21 Dec 2023 23:05:10 +0000 (23:05 +0000)] 
aarch64: Handle GCS marking

 - Handle GCS marking
 - Use l_searchlist.r_list for gcs (allows using the
   same function for static exe)

Co-authored-by: Yury Khrustalev <yury.khrustalev@arm.com>
Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
6 months agoaarch64: Use l_searchlist.r_list for bti
Szabolcs Nagy [Thu, 28 Dec 2023 18:31:32 +0000 (18:31 +0000)] 
aarch64: Use l_searchlist.r_list for bti

Allows using the same function for static exe.

Reviewed-by: Wilco Dijkstra <Wilco.Dijkstra@arm.com>
6 months agoaarch64: Mark objects with GCS property note
Szabolcs Nagy [Fri, 22 Dec 2023 12:29:48 +0000 (12:29 +0000)] 
aarch64: Mark objects with GCS property note

Reviewed-by: Wilco Dijkstra <Wilco.Dijkstra@arm.com>
Reviewed-by: Carlos O'Donell <carlos@redhat.com>
6 months agoaarch64: Enable GCS in dynamic linked exe
Szabolcs Nagy [Fri, 14 Jul 2023 14:49:11 +0000 (15:49 +0100)] 
aarch64: Enable GCS in dynamic linked exe

Use the dynamic linker start code to enable GCS in the dynamic linked
case after _dl_start returns and before _dl_start_user which marks
the point after which user code may run.

Like in the static linked case this ensures that GCS is enabled on a
top level stack frame.

Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
6 months agoaarch64: Enable GCS in static linked exe
Szabolcs Nagy [Thu, 13 Jul 2023 06:22:44 +0000 (07:22 +0100)] 
aarch64: Enable GCS in static linked exe

Use the ARCH_SETUP_TLS hook to enable GCS in the static linked case.
The system call must be inlined and then GCS is enabled on a top
level stack frame that does not return and has no exception handlers
above it.

Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
6 months agoaarch64: Add glibc.cpu.aarch64_gcs tunable
Szabolcs Nagy [Mon, 17 Jul 2023 07:31:05 +0000 (08:31 +0100)] 
aarch64: Add glibc.cpu.aarch64_gcs tunable

This tunable controls Guarded Control Stack (GCS) for the process.

0 = disabled: do not enable GCS
1 = enforced: check markings and fail if any binary is not marked
2 = optional: check markings but keep GCS off if a binary is unmarked
3 = override: enable GCS, markings are ignored

By default it is 0, so GCS is disabled, value 1 will enable GCS.

The status is stored into GL(dl_aarch64_gcs) early and only applied
later, since enabling GCS is tricky: it must happen on a top level
stack frame. Using GL instead of GLRO because it may need updates
depending on loaded libraries that happen after readonly protection
is applied, however library marking based GCS setting is not yet
implemented.

Describe new tunable in the manual.

Co-authored-by: Yury Khrustalev <yury.khrustalev@arm.com>
Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
6 months agoaarch64: Add GCS support for makecontext
Szabolcs Nagy [Tue, 4 Apr 2023 09:42:21 +0000 (10:42 +0100)] 
aarch64: Add GCS support for makecontext

Changed the makecontext logic: previously the first setcontext jumped
straight to the user callback function and the return address is set
to __startcontext. This does not work when GCS is enabled as the
integrity of the return address is protected, so instead the context
is setup such that setcontext jumps to __startcontext which calls the
user callback (passed in x20).

The map_shadow_stack syscall is used to allocate a suitably sized GCS
(which includes some reserved area to account for altstack signal
handlers and otherwise supports maximum number of 16 byte aligned
stack frames on the given stack) however the GCS is never freed as
the lifetime of ucontext and related stack is user managed.

Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
6 months agoaarch64: Mark swapcontext with indirect_return
Szabolcs Nagy [Thu, 28 Dec 2023 15:53:38 +0000 (15:53 +0000)] 
aarch64: Mark swapcontext with indirect_return

Reviewed-by: Wilco Dijkstra <Wilco.Dijkstra@arm.com>
Reviewed-by: Carlos O'Donell <carlos@redhat.com>
6 months agoaarch64: Add GCS support for setcontext
Szabolcs Nagy [Fri, 24 Feb 2023 16:29:32 +0000 (16:29 +0000)] 
aarch64: Add GCS support for setcontext

Userspace ucontext needs to store GCSPR, it does not have to be
compatible with the kernel ucontext. For now we use the linux
struct gcs_context layout but only use the gcspr field from it.

Similar implementation to the longjmp code, supports switching GCS
if the target GCS is capped, and unwinding a continuous GCS to a
previous state.

Reviewed-by: Wilco Dijkstra <Wilco.Dijkstra@arm.com>
Reviewed-by: Carlos O'Donell <carlos@redhat.com>
6 months agoaarch64: Add GCS support to vfork
Szabolcs Nagy [Wed, 27 Dec 2023 18:36:10 +0000 (18:36 +0000)] 
aarch64: Add GCS support to vfork

Reviewed-by: Wilco Dijkstra <Wilco.Dijkstra@arm.com>
Reviewed-by: Carlos O'Donell <carlos@redhat.com>
6 months agoaarch64: Add GCS support to longjmp
Szabolcs Nagy [Thu, 23 Feb 2023 08:54:04 +0000 (08:54 +0000)] 
aarch64: Add GCS support to longjmp

This implementations ensures that longjmp across different stacks
works: it scans for GCS cap token and switches GCS if necessary
then the target GCSPR is restored with a GCSPOPM loop once the
current GCSPR is on the same GCS.

This makes longjmp linear time in the number of jumped over stack
frames when GCS is enabled.

Reviewed-by: Carlos O'Donell <carlos@redhat.com>
Reviewed-by: Wilco Dijkstra <Wilco.Dijkstra@arm.com>
6 months agoaarch64: Define jmp_buf offset for GCS
Szabolcs Nagy [Fri, 25 Nov 2022 18:16:07 +0000 (18:16 +0000)] 
aarch64: Define jmp_buf offset for GCS

The target specific internal __longjmp is called with a __jmp_buf
argument which has its size exposed in the ABI. On aarch64 this has
no space left, so GCSPR cannot be restored in longjmp in the usual
way, which is needed for the Guarded Control Stack (GCS) extension.

setjmp is implemented via __sigsetjmp which has a jmp_buf argument
however it is also called with __pthread_unwind_buf_t argument cast
to jmp_buf (in cancellation cleanup code built with -fno-exception).
The two types, jmp_buf and __pthread_unwind_buf_t, have common bits
beyond the __jmp_buf field and there is unused space there which we
can use for saving GCSPR.

For this to work some bits of those two generic types have to be
reserved for target specific use and the generic code in glibc has
to ensure that __longjmp is always called with a __jmp_buf that is
embedded into one of those two types. Morally __longjmp should be
changed to take jmp_buf as argument, but that is an intrusive change
across targets.

Note: longjmp is never called with __pthread_unwind_buf_t from user
code, only the internal __libc_longjmp is called with that type and
thus the two types could have separate longjmp implementations on a
target. We don't rely on this now (but might in the future given that
cancellation unwind does not need to restore GCSPR).

Given the above this patch finds an unused slot for GCSPR. This
placement is not exposed in the ABI so it may change in the future.
This is also very target ABI specific so the generic types cannot
be easily changed to clearly mark the reserved fields.

Reviewed-by: Carlos O'Donell <carlos@redhat.com>
Reviewed-by: Wilco Dijkstra <Wilco.Dijkstra@arm.com>
6 months agoelf.h: Define GNU_PROPERTY_AARCH64_FEATURE_1_GCS
Szabolcs Nagy [Fri, 22 Dec 2023 09:47:33 +0000 (09:47 +0000)] 
elf.h: Define GNU_PROPERTY_AARCH64_FEATURE_1_GCS

Reviewed-by: Carlos O'Donell <carlos@redhat.com>
Reviewed-by: Wilco Dijkstra <Wilco.Dijkstra@arm.com>
6 months agoaarch64: Add asm helpers for GCS
Szabolcs Nagy [Wed, 22 Feb 2023 14:35:00 +0000 (14:35 +0000)] 
aarch64: Add asm helpers for GCS

The Guarded Control Stack instructions can be present even if the
hardware does not support the extension (runtime checked feature),
so the asm code should be backward compatible with old assemblers.

Reviewed-by: Carlos O'Donell <carlos@redhat.com>
Reviewed-by: Wilco Dijkstra <Wilco.Dijkstra@arm.com>
6 months agohurd: Fix EINVAL error on linking to a slash-trailing path [BZ #32569]
Samuel Thibault [Sun, 19 Jan 2025 13:59:13 +0000 (14:59 +0100)] 
hurd: Fix EINVAL error on linking to a slash-trailing path [BZ #32569]

When the target path finishes with a slash, __file_name_split_at returns
an empty file name. We can test for this to refuse doing the link.

6 months agonptl: Use all of g1_start and g_signals
Malte Skarupke [Wed, 4 Dec 2024 13:05:40 +0000 (08:05 -0500)] 
nptl: Use all of g1_start and g_signals

The LSB of g_signals was unused. The LSB of g1_start was used to indicate
which group is G2. This was used to always go to sleep in pthread_cond_wait
if a waiter is in G2. A comment earlier in the file says that this is not
correct to do:

 "Waiters cannot determine whether they are currently in G2 or G1 -- but they
  do not have to because all they are interested in is whether there are
  available signals"

I either would have had to update the comment, or get rid of the check. I
chose to get rid of the check. In fact I don't quite know why it was there.
There will never be available signals for group G2, so we didn't need the
special case. Even if there were, this would just be a spurious wake. This
might have caught some cases where the count has wrapped around, but it
wouldn't reliably do that, (and even if it did, why would you want to force a
sleep in that case?) and we don't support that many concurrent waiters
anyway. Getting rid of it allows us to use one more bit, making us more
robust to wraparound.

Signed-off-by: Malte Skarupke <malteskarupke@fastmail.fm>
Reviewed-by: Carlos O'Donell <carlos@redhat.com>
6 months agonptl: rename __condvar_quiesce_and_switch_g1
Malte Skarupke [Wed, 4 Dec 2024 13:04:54 +0000 (08:04 -0500)] 
nptl: rename __condvar_quiesce_and_switch_g1

This function no longer waits for threads to leave g1, so rename it to
__condvar_switch_g1

Signed-off-by: Malte Skarupke <malteskarupke@fastmail.fm>
Reviewed-by: Carlos O'Donell <carlos@redhat.com>
6 months agonptl: Fix indentation
Malte Skarupke [Wed, 4 Dec 2024 13:04:10 +0000 (08:04 -0500)] 
nptl: Fix indentation

In my previous change I turned a nested loop into a simple loop. I'm doing
the resulting indentation changes in a separate commit to make the diff on
the previous commit easier to review.

Signed-off-by: Malte Skarupke <malteskarupke@fastmail.fm>
Reviewed-by: Carlos O'Donell <carlos@redhat.com>
6 months agonptl: Use a single loop in pthread_cond_wait instaed of a nested loop
Malte Skarupke [Wed, 4 Dec 2024 13:03:44 +0000 (08:03 -0500)] 
nptl: Use a single loop in pthread_cond_wait instaed of a nested loop

The loop was a little more complicated than necessary. There was only one
break statement out of the inner loop, and the outer loop was nearly empty.
So just remove the outer loop, moving its code to the one break statement in
the inner loop. This allows us to replace all gotos with break statements.

Signed-off-by: Malte Skarupke <malteskarupke@fastmail.fm>
Reviewed-by: Carlos O'Donell <carlos@redhat.com>
6 months agonptl: Remove g_refs from condition variables
Malte Skarupke [Wed, 4 Dec 2024 12:56:38 +0000 (07:56 -0500)] 
nptl: Remove g_refs from condition variables

This variable used to be needed to wait in group switching until all sleepers
have confirmed that they have woken. This is no longer needed. Nothing waits
on this variable so there is no need to track how many threads are currently
asleep in each group.

Signed-off-by: Malte Skarupke <malteskarupke@fastmail.fm>
Reviewed-by: Carlos O'Donell <carlos@redhat.com>
6 months agonptl: Remove unnecessary quadruple check in pthread_cond_wait
Malte Skarupke [Wed, 4 Dec 2024 12:56:13 +0000 (07:56 -0500)] 
nptl: Remove unnecessary quadruple check in pthread_cond_wait

pthread_cond_wait was checking whether it was in a closed group no less than
four times. Checking once is enough. Here are the four checks:

1. While spin-waiting. This was dead code: maxspin is set to 0 and has been
   for years.
2. Before deciding to go to sleep, and before incrementing grefs: I kept this
3. After incrementing grefs. There is no reason to think that the group would
   close while we do an atomic increment. Obviously it could close at any
   point, but that doesn't mean we have to recheck after every step. This
   check was equally good as check 2, except it has to do more work.
4. When we find ourselves in a group that has a signal. We only get here after
   we check that we're not in a closed group. There is no need to check again.
   The check would only have helped in cases where the compare_exchange in the
   next line would also have failed. Relying on the compare_exchange is fine.

Removing the duplicate checks clarifies the code.

Signed-off-by: Malte Skarupke <malteskarupke@fastmail.fm>
Reviewed-by: Carlos O'Donell <carlos@redhat.com>
6 months agonptl: Remove unnecessary catch-all-wake in condvar group switch
Malte Skarupke [Wed, 4 Dec 2024 12:55:50 +0000 (07:55 -0500)] 
nptl: Remove unnecessary catch-all-wake in condvar group switch

This wake is unnecessary. We only switch groups after every sleeper in a group
has been woken. Sure, they may take a while to actually wake up and may still
hold a reference, but waking them a second time doesn't speed that up. Instead
this just makes the code more complicated and may hide problems.

In particular this safety wake wouldn't even have helped with the bug that was
fixed by Barrus' patch: The bug there was that pthread_cond_signal would not
switch g1 when it should, so we wouldn't even have entered this code path.

Signed-off-by: Malte Skarupke <malteskarupke@fastmail.fm>
Reviewed-by: Carlos O'Donell <carlos@redhat.com>
6 months agonptl: Update comments and indentation for new condvar implementation
Malte Skarupke [Wed, 4 Dec 2024 12:55:22 +0000 (07:55 -0500)] 
nptl: Update comments and indentation for new condvar implementation

Some comments were wrong after the most recent commit. This fixes that.

Also fixing indentation where it was using spaces instead of tabs.

Signed-off-by: Malte Skarupke <malteskarupke@fastmail.fm>
Reviewed-by: Carlos O'Donell <carlos@redhat.com>
6 months agopthreads NPTL: lost wakeup fix 2
Frank Barrus [Wed, 4 Dec 2024 12:55:02 +0000 (07:55 -0500)] 
pthreads NPTL: lost wakeup fix 2

This fixes the lost wakeup (from a bug in signal stealing) with a change
in the usage of g_signals[] in the condition variable internal state.
It also completely eliminates the concept and handling of signal stealing,
as well as the need for signalers to block to wait for waiters to wake
up every time there is a G1/G2 switch.  This greatly reduces the average
and maximum latency for pthread_cond_signal.

The g_signals[] field now contains a signal count that is relative to
the current g1_start value.  Since it is a 32-bit field, and the LSB is
still reserved (though not currently used anymore), it has a 31-bit value
that corresponds to the low 31 bits of the sequence number in g1_start.
(since g1_start also has an LSB flag, this means bits 31:1 in g_signals
correspond to bits 31:1 in g1_start, plus the current signal count)

By making the signal count relative to g1_start, there is no longer
any ambiguity or A/B/A issue, and thus any checks before blocking,
including the futex call itself, are guaranteed not to block if the G1/G2
switch occurs, even if the signal count remains the same.  This allows
initially safely blocking in G2 until the switch to G1 occurs, and
then transitioning from G1 to a new G1 or G2, and always being able to
distinguish the state change.  This removes the race condition and A/B/A
problems that otherwise ocurred if a late (pre-empted) waiter were to
resume just as the futex call attempted to block on g_signal since
otherwise there was no last opportunity to re-check things like whether
the current G1 group was already closed.

By fixing these issues, the signal stealing code can be eliminated,
since there is no concept of signal stealing anymore.  The code to block
for all waiters to exit g_refs can also be removed, since any waiters
that are still in the g_refs region can be guaranteed to safely wake
up and exit.  If there are still any left at this time, they are all
sent one final futex wakeup to ensure that they are not blocked any
longer, but there is no need for the signaller to block and wait for
them to wake up and exit the g_refs region.

The signal count is then effectively "zeroed" but since it is now
relative to g1_start, this is done by advancing it to a new value that
can be observed by any pending blocking waiters.  Any late waiters can
always tell the difference, and can thus just cleanly exit if they are
in a stale G1 or G2.  They can never steal a signal from the current
G1 if they are not in the current G1, since the signal value that has
to match in the cmpxchg has the low 31 bits of the g1_start value
contained in it, and that's first checked, and then it won't match if
there's a G1/G2 change.

Note: the 31-bit sequence number used in g_signals is designed to
handle wrap-around when checking the signal count, but if the entire
31-bit wraparound (2 billion signals) occurs while there is still a
late waiter that has not yet resumed, and it happens to then match
the current g1_start low bits, and the pre-emption occurs after the
normal "closed group" checks (which are 64-bit) but then hits the
futex syscall and signal consuming code, then an A/B/A issue could
still result and cause an incorrect assumption about whether it
should block.  This particular scenario seems unlikely in practice.
Note that once awake from the futex, the waiter would notice the
closed group before consuming the signal (since that's still a 64-bit
check that would not be aliased in the wrap-around in g_signals),
so the biggest impact would be blocking on the futex until the next
full wakeup from a G1/G2 switch.

Signed-off-by: Frank Barrus <frankbarrus_sw@shaggy.cc>
Reviewed-by: Carlos O'Donell <carlos@redhat.com>
6 months agomath: update arm ulps
Adhemerval Zanella [Fri, 17 Jan 2025 19:36:22 +0000 (19:36 +0000)] 
math: update arm ulps

GCC 14.2.1 with -mfpu=neon-vfpv4 -mfloat-abi=hard -mtls-dialect=gnu
-marm -march=armv7-a+neon-vfpv4 on Neoverse-N1.

6 months agomath: update arm ulps
Andreas K. Hüttel [Fri, 17 Jan 2025 13:50:38 +0000 (14:50 +0100)] 
math: update arm ulps

CC="gcc -O2 -pipe -march=armv7-a -mfpu=vfpv3-d16 -mfloat-abi=hard"
linux32 chroot on aarch64

Signed-off-by: Andreas K. Hüttel <dilfridge@gentoo.org>
6 months agoLinux: Add tests that check that TLS and rseq area are separate
Florian Weimer [Thu, 16 Jan 2025 19:02:42 +0000 (20:02 +0100)] 
Linux: Add tests that check that TLS and rseq area are separate

The new test elf/tst-rseq-tls-range-4096-static reliably detected
the extra TLS allocation problem (tcb_offset was dropped from
the allocation size) on aarch64.  It also failed with a crash
in dlopen *before* the extra TLS changes, so TLS alignment with
static dlopen was already broken.

Reviewed-by: Michael Jeanson <mjeanson@efficios.com>
6 months agoConsolidate TLS block allocation for static binaries with ld.so
Florian Weimer [Thu, 16 Jan 2025 19:02:42 +0000 (20:02 +0100)] 
Consolidate TLS block allocation for static binaries with ld.so

Use the same code to compute the TLS block size and its alignment.
The code in elf/dl-tls.c is linked in anyway for all binaries
due to the reference to _dl_tls_static_surplus_init.

It is not possible to call _dl_allocate_tls_storage directly
because malloc is not available in the static case.  (The
dynamic linker uses the minimal malloc at this stage.)  Therefore,
split _dl_tls_block_size_with_pre and _dl_tls_block_align from
_dl_allocate_tls_storage, and call those new functions from
__libc_setup_tls.

This fixes extra TLS allocation for the static case, and apparently
some pre-existing bugs as well (the independent recomputation of
TLS block sizes in init_static_tls looks rather suspect).

Fixes commit 0e411c5d3098982d67cd2d7a233eaa6c977a1869 ("Add generic
'extra TLS'").

6 months agoelf: Iterate over loaded object list in _dl_determine_tlsoffset
Florian Weimer [Thu, 16 Jan 2025 19:02:42 +0000 (20:02 +0100)] 
elf: Iterate over loaded object list in _dl_determine_tlsoffset

The old code used the slotinfo array as a scratch area to pass the
list of TLS-using objects to _dl_determine_tlsoffset.  All array
entries are subsequently overwritten by _dl_add_to_slotinfo,
except the first one.  The link maps are usually not at their
right position for their module ID in the slotinfo array, so
the initial use of the slotinfo array would be incorrect if not
for scratch purposes only.

In _dl_tls_initial_modid_limit_setup, the old code relied that
some link map was written to the first slotinfo entry.  After the
change, this no longer happens because TLS module ID zero is unused.
It's also necessary to move the call after the real initialization
of the slotinfo array.

6 months agobenchtests: Add dummy in put files cospi, cospif, sinpi, sinpif, tanpi, tanpif
Florian Weimer [Thu, 16 Jan 2025 18:59:58 +0000 (19:59 +0100)] 
benchtests: Add dummy in put files cospi, cospif, sinpi, sinpif, tanpi, tanpif

This fixes an AArch64 build failure:

python3 -B ../sysdeps/aarch64/fpu/scripts/bench_libmvec_advsimd.py bench-float-advsimd-cospi > …/benchtests/bench-float-advsimd-cospi.c
Traceback (most recent call last):
  File "…/sysdeps/aarch64/fpu/scripts/bench_libmvec_advsimd.py", line 106, in <module>
    main(sys.argv[1])
    ~~~~^^^^^^^^^^^^^
  File "…/sysdeps/aarch64/fpu/scripts/bench_libmvec_advsimd.py", line 81, in main
    with open(f"../benchtests/libmvec/{input_filename}") as f:
         ~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

FileNotFoundError: [Errno 2] No such file or directory: '../benchtests/libmvec/cospif-inputs'

6 months agoLinux: Fixes for getrandom fork handling
Florian Weimer [Thu, 16 Jan 2025 17:45:25 +0000 (18:45 +0100)] 
Linux: Fixes for getrandom fork handling

Careful updates of grnd_alloc.len are required to ensure that
after fork, grnd_alloc.states does not contain entries that
are also encountered by __getrandom_reset_state in TCBs.
For the same reason, it is necessary to overwrite the TCB state
pointer with NULL before updating grnd_alloc.states in
__getrandom_vdso_release.

Before this change, different TCBs could share the same getrandom
state after multi-threaded fork.  This would be a critical security
bug (predictable randomness) if not caught during development.

The additional check in stdlib/tst-arc4random-thread makes it more
likely that the test fails due to the bugs mentioned above.

Both __getrandom_reset_state and __getrandom_vdso_release could
put reserved NULL pointers into the states array.  This is also
fixed with this commit.  After these changes, no null pointers were
observed in the states array during testing.

Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
6 months agoarc: Update libm test ulps
Pavel Kozlov [Wed, 15 Jan 2025 11:19:47 +0000 (11:19 +0000)] 
arc: Update libm test ulps

Update fpu and nofpu ULPs. Regenerated on HSDK-4xD board
running Linux 6.12.7 / GCC 14.2.0.

6 months agomach: Add missing error messages
Samuel Thibault [Tue, 14 Jan 2025 21:40:54 +0000 (22:40 +0100)] 
mach: Add missing error messages

6 months agoaffinity-inheritance: Overallocate CPU sets
Stefan Liebler [Fri, 10 Jan 2025 17:55:50 +0000 (12:55 -0500)] 
affinity-inheritance: Overallocate CPU sets

Some kernels on S390 appear to return a CPU affinity mask based on
configured processors rather than the ones online.  Overallocate the CPU
set to match that, but operate only on the ones online.

Signed-off-by: Siddhesh Poyarekar <siddhesh@sourceware.org>
Co-authored-by: Siddhesh Poyarekar <siddhesh@sourceware.org>
6 months agomach: Fix fallthrough warning
Samuel Thibault [Mon, 13 Jan 2025 23:11:33 +0000 (00:11 +0100)] 
mach: Fix fallthrough warning

gcc would not take the /* FALLTHROUGH */ inside the #ifdef

6 months agosh4: ensure FPSCR.PR==0 when executing FRCHG [BZ #27543]
mirabilos [Mon, 13 Jan 2025 14:24:37 +0000 (11:24 -0300)] 
sh4: ensure FPSCR.PR==0 when executing FRCHG [BZ #27543]

If the bit is not 0, the operations FRCHG and FSCHG are
undefined and cause a trap; qemu now checks for this as
well, so we set it to 0 temporarily and restore the old
value in getcontext afterwards (setcontext/swapcontext
already do so).

From the discussion in the bugreport, this can probably
be optimised in one place but none of the people involved
are SH4 assembly experts, this patch is field-tested, and
it’s not a code path run often. The other question, what
happens if a signal occurs while the bit is temporarily 0,
is also still unsolved, but to fix that a kernel change is
most likely needed; this patch changes a certain trap on
many CPUs for a hard-to-get trap in a signal handler if a
signal is delivered during the few instructions the PR bit
is temporarily set to 0, so it’s not a regression for most
users.

See BZ and https://bugs.launchpad.net/qemu/+bug/1796520 for
related discussion, references and review comments.

Signed-off-by: mirabilos <tg@debian.org>
Reviewed-by: Oleg Endo <olegendo@gcc.gnu.org>
Tested-by: John Paul Adrian Glaubitz <glaubitz@physik.fu-berlin.de>
Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
6 months agoinet: Add common IPv6 packet header macros
Dan Luedtke [Wed, 4 Dec 2024 19:50:22 +0000 (11:50 -0800)] 
inet: Add common IPv6 packet header macros

Adds commonly used IPv6 packet header macros similar to what is available
on NetBSD and FreeBSD in sys/netinet/ip6.h and Android in
libc/include/netinet/ip6.h

Usage example IPV6_VERSION_MASK and IPV6_VERSION:

    if ((ip6->ip6_vfc & IPV6_VERSION_MASK) == IPV6_VERSION)
        return true;

Usage example IPV6_FLOWINFO_MASK:

    ip6->ip6_flow = (flow & IPV6_FLOWINFO_MASK);

The relevant standard is RFC2460 (Internet Protocol, Version 6
Specification). It defines the Internet Protocol version (IPV6_VERSION)
and reduced the size of the flow label field from 24 to 20 bits
(IPV6_FLOWLABEL_MASK). The traffic class and flow label fields together
make up the flow information (IPV6_FLOWINFO_MASK).

Tested on x86_64 GNU/Linux

Signed-off-by: Dan Luedtke <danrl@google.com>
Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
6 months agostdio-common: Suppress Clang warnings on scanf13.c with fortify enable
Adhemerval Zanella [Fri, 10 Jan 2025 17:06:06 +0000 (14:06 -0300)] 
stdio-common: Suppress Clang warnings on scanf13.c with fortify enable

clang-19 shows:

scanf13.c:28:40: error: 'sscanf' may overflow; destination buffer in argument 4 has size 8, but the corresponding specifier may require size 11 [-Werror,-Wfortify-source]
   28 |               "A%ms%10ms%4m[bcd]%4mcB", &sp1, &sp2, &sp3, &sp4) != 4)
      |                                               ^
scanf13.c:94:34: error: 'sscanf' may overflow; destination buffer in argument 3 has size 8, but the corresponding specifier may require size 2049 [-Werror,-Wfortify-source]
   94 |   if (sscanf (buf, "%2048ms%mc", &sp3, &sp4) != 2)
      |                                  ^
scanf13.c:110:61: error: 'sscanf' may overflow; destination buffer in argument 4 has size 8, but the corresponding specifier may require size 1501 [-Werror,-Wfortify-source]
  110 |   if (sscanf (buf, "%4mc%1500m[dr/]%548m[abc/d]%3mc", &sp1, &sp2, &sp3, &sp4)
      |                                                             ^
scanf13.c:110:67: error: 'sscanf' may overflow; destination buffer in argument 5 has size 8, but the corresponding specifier may require size 549 [-Werror,-Wfortify-source]
  110 |   if (sscanf (buf, "%4mc%1500m[dr/]%548m[abc/d]%3mc", &sp1, &sp2, &sp3, &sp4)

clang does have some support to handle 'm' prefix for -Wformat; but it
lacks support for -Wfortify to understand that it is up to libc to
allocate the memory, and uses the pointer size instead to calculate
validity.

6 months agoelf: Suppress unused function clang for __ifunc_resolver
Adhemerval Zanella [Fri, 3 Jan 2025 11:33:16 +0000 (08:33 -0300)] 
elf: Suppress unused function clang for __ifunc_resolver

The __ifunc_resolver macro expands to:

  extern __typeof (__redirect_name) name __attribute__ ((ifunc ("iname_ifunc")));
  static __typeof (__redirect_name) *name_ifunc (void) { [...] };

And although NAME_IFUNC is and alias for NAME, clang-18 still emits
an 'unused function 'name_ifunc' [-Werror,-Wunused-function]'
warning.

6 months agogmon: Disable tst-profile-static with clang
Adhemerval Zanella [Thu, 2 Jan 2025 19:36:35 +0000 (16:36 -0300)] 
gmon: Disable tst-profile-static with clang

clang does not support -profile:

  clang: error: unknown argument '-profile'; did you mean '-fprofile'?

6 months agoaarch64: Use 64-bit variable to access the special registers
Adhemerval Zanella [Thu, 2 Jan 2025 19:12:34 +0000 (16:12 -0300)] 
aarch64: Use 64-bit variable to access the special registers

clang issues:

  error: value size does not match register size specified by the
  constraint and modifier [-Werror,-Wasm-operand-widths]

while tryng to use 32 bit variables with 'mrs' to get/set the
fpsr, dczid_el0, and ctr.

6 months agohurd: Set _POSIX_MONOTONIC_CLOCK to 200809L
Samuel Thibault [Sun, 12 Jan 2025 21:40:25 +0000 (22:40 +0100)] 
hurd: Set _POSIX_MONOTONIC_CLOCK to 200809L

Now that CLOCK_MONOTONIC is supported.

6 months agohurd: Add CLOCK_MONOTONIC to clock_nanosleep
Samuel Thibault [Sun, 12 Jan 2025 21:39:30 +0000 (22:39 +0100)] 
hurd: Add CLOCK_MONOTONIC to clock_nanosleep

6 months agohurd: Add CLOCK_MONOTONIC support to lll
Samuel Thibault [Sun, 12 Jan 2025 21:39:20 +0000 (22:39 +0100)] 
hurd: Add CLOCK_MONOTONIC support to lll

6 months agomach: Add CLOCK_MONOTONIC case in clock_gettime()
Zhaoming Luo [Mon, 6 Jan 2025 04:39:07 +0000 (12:39 +0800)] 
mach: Add CLOCK_MONOTONIC case in clock_gettime()

The Mach RPC host_get_uptime64() is implemented. It returns the elapsed time
value since bootup. See

https://git.savannah.gnu.org/cgit/hurd/gnumach.git/commit/?id=fc494bfe3fb6363e1077dc035eb119970d84a9d1

In this patch, the RPC is used to implement the monotonic clock for
mach.

* config.h.in: Add HAVE_HOST_GET_UPTIME64 config entry
* sysdeps/mach/clock_gettime.c: Add CLOCK_MONOTONIC case
* sysdeps/mach/configure: Check the existence of host_get_uptime64 RPC
* sysdeps/mach/configure.ac: Check the existence of host_get_uptime64 RPC

Message-ID: <20250106043907.1046-1-zhmingluo@163.com>

6 months agohurd: Mark more memory-hungry tests as unsupported
Samuel Thibault [Sun, 12 Jan 2025 15:05:58 +0000 (16:05 +0100)] 
hurd: Mark more memory-hungry tests as unsupported

until RLIMIT_AS support gets commited in gnumach.

6 months agosocket/tst-cmsghdr: Fix alignment of cmsghdr
Samuel Thibault [Sun, 12 Jan 2025 14:57:26 +0000 (15:57 +0100)] 
socket/tst-cmsghdr: Fix alignment of cmsghdr

The computation was correct on Linux only by luck because the cmsghdr size
is already aligned there.

6 months agoelf: make tst-tls_tp_offset compare &thread_var to THREAD_SELF
Samuel Thibault [Sat, 11 Jan 2025 21:53:34 +0000 (22:53 +0100)] 
elf: make tst-tls_tp_offset compare &thread_var to THREAD_SELF

rather than pthread_self (), which in htl is not a pointer into dtv, but an
index.

6 months agohurd: Mark more memory-hungry tests as unsupported
Samuel Thibault [Sun, 12 Jan 2025 00:03:04 +0000 (01:03 +0100)] 
hurd: Mark more memory-hungry tests as unsupported

until RLIMIT_AS support gets commited in gnumach.

6 months agohurd: Mark tst-tls-allocation-failure-static-patched as supported
Samuel Thibault [Sat, 11 Jan 2025 23:11:15 +0000 (00:11 +0100)] 
hurd: Mark tst-tls-allocation-failure-static-patched as supported

The failure was not due to RLIMIT_AS but unsupported intentional early
abort.

6 months agohurd: Cope with signals sent to ourself early
Samuel Thibault [Sat, 11 Jan 2025 23:09:44 +0000 (00:09 +0100)] 
hurd: Cope with signals sent to ourself early

Typically when aborting during initialization, before signals are set
up.

6 months agox86-64: Cast __rseq_offset to long long int [BZ #32543]
H.J. Lu [Sat, 11 Jan 2025 14:57:02 +0000 (22:57 +0800)] 
x86-64: Cast __rseq_offset to long long int [BZ #32543]

commit 494d65129ed5ae1154b75cc189bbdde5e9ecf1df
Author: Michael Jeanson <mjeanson@efficios.com>
Date:   Thu Aug 1 10:35:34 2024 -0400

    nptl: Introduce <rseq-access.h> for RSEQ_* accessors

added things like

       asm volatile ("movl %%fs:%P1(%q2),%0"                                  \
                     : "=r" (__value)                                         \
                     : "i" (offsetof (struct rseq_area, member)),             \
                       "r" (__rseq_offset));       \

But this doesn't work for x32 when __rseq_offset is negative since the
address is computed as

FS + 32-bit to 64-bit zero extension of __rseq_offset
+ offsetof (struct rseq_area, member)

Cast __rseq_offset to long long int

                       "r" ((long long int) __rseq_offset));       \

to sign-extend 32-bit __rseq_offset to 64-bit.  This is a no-op for x86-64
since x86-64 __rseq_offset is 64-bit.  This fixes BZ #32543.

Signed-off-by: H.J. Lu <hjl.tools@gmail.com>
Reviewed-by: Florian Weimer <fweimer@redhat.com>
6 months agohurd: Mark more memory-hungry tests as unsupported
Samuel Thibault [Fri, 10 Jan 2025 19:08:33 +0000 (20:08 +0100)] 
hurd: Mark more memory-hungry tests as unsupported

until RLIMIT_AS support gets commited in gnumach.

6 months agoLinux: Update internal copy of '<sys/rseq.h>'
Michael Jeanson [Thu, 1 Aug 2024 15:04:22 +0000 (11:04 -0400)] 
Linux: Update internal copy of '<sys/rseq.h>'

Sync the internal copy of '<sys/rseq.h>' with the latest Linux kernel
'include/uapi/linux/rseq.h'.

Signed-off-by: Michael Jeanson <mjeanson@efficios.com>
Reviewed-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Reviewed-by: Florian Weimer <fweimer@redhat.com>
6 months agonptl: Remove the rseq area from 'struct pthread'
Michael Jeanson [Thu, 1 Aug 2024 18:29:10 +0000 (14:29 -0400)] 
nptl: Remove the rseq area from 'struct pthread'

The rseq extensible ABI implementation moved the rseq area to the 'extra
TLS' block, remove the unused 'rseq_area' member of 'struct pthread'.

Signed-off-by: Michael Jeanson <mjeanson@efficios.com>
Reviewed-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Reviewed-by: Florian Weimer <fweimer@redhat.com>
6 months agonptl: Move the rseq area to the 'extra TLS' block
Michael Jeanson [Wed, 10 Jul 2024 19:48:49 +0000 (15:48 -0400)] 
nptl: Move the rseq area to the 'extra TLS' block

Move the rseq area to the newly added 'extra TLS' block, this is the
last step in adding support for the rseq extended ABI. The size of the
rseq area is now dynamic and depends on the rseq features reported by
the kernel through the elf auxiliary vector. This will allow
applications to use rseq features past the 32 bytes of the original rseq
ABI as they become available in future kernels.

Signed-off-by: Michael Jeanson <mjeanson@efficios.com>
Reviewed-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Reviewed-by: Florian Weimer <fweimer@redhat.com>
6 months agonptl: Introduce <rseq-access.h> for RSEQ_* accessors
Michael Jeanson [Thu, 1 Aug 2024 14:35:34 +0000 (10:35 -0400)] 
nptl: Introduce <rseq-access.h> for RSEQ_* accessors

In preparation to move the rseq area to the 'extra TLS' block, we need
accessors based on the thread pointer and the rseq offset. The ONCE
variant of the accessors ensures single-copy atomicity for loads and
stores which is required for all fields once the registration is active.

A separate header is required to allow including <atomic.h> which
results in an include loop when added to <tcb-access.h>.

Signed-off-by: Michael Jeanson <mjeanson@efficios.com>
Reviewed-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Reviewed-by: Florian Weimer <fweimer@redhat.com>
6 months agonptl: add rtld_hidden_proto to __rseq_size and __rseq_offset
Michael Jeanson [Wed, 20 Nov 2024 22:28:07 +0000 (22:28 +0000)] 
nptl: add rtld_hidden_proto to __rseq_size and __rseq_offset

This allows accessing the internal aliases of __rseq_size and
__rseq_offset from ld.so without ifdefs and avoids dynamic symbol
binding at run time for both variables.

Signed-off-by: Michael Jeanson <mjeanson@efficios.com>
Reviewed-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Reviewed-by: Florian Weimer <fweimer@redhat.com>
6 months agoAdd Linux 'extra TLS'
Michael Jeanson [Thu, 1 Aug 2024 15:10:49 +0000 (11:10 -0400)] 
Add Linux 'extra TLS'

Add the Linux implementation of 'extra TLS' which will allocate space
for the rseq area at the end of the TLS blocks in allocation order.

Signed-off-by: Michael Jeanson <mjeanson@efficios.com>
Reviewed-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Reviewed-by: Florian Weimer <fweimer@redhat.com>
6 months agoAdd generic 'extra TLS'
Michael Jeanson [Wed, 10 Jul 2024 19:48:11 +0000 (15:48 -0400)] 
Add generic 'extra TLS'

Add the logic to append an 'extra TLS' block in the TLS block allocator
with a generic stub implementation. The duplicated code in
'csu/libc-tls.c' and 'elf/dl-tls.c' is to handle both statically linked
applications and the ELF dynamic loader.

Signed-off-by: Michael Jeanson <mjeanson@efficios.com>
Reviewed-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Reviewed-by: Florian Weimer <fweimer@redhat.com>
6 months agonptl: Add rseq auxvals
Michael Jeanson [Wed, 10 Jul 2024 19:37:28 +0000 (15:37 -0400)] 
nptl: Add rseq auxvals

Get the rseq feature size and alignment requirement from the auxiliary
vector for use inside the dynamic loader. Use '__rseq_size' directly to
store the feature size. If the main thread registration fails or is
disabled by tunable, reset the value to 0.

This will be used in the TLS block allocator to compute the size and
alignment of the rseq area block for the extended ABI support.

Signed-off-by: Michael Jeanson <mjeanson@efficios.com>
Reviewed-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Reviewed-by: Florian Weimer <fweimer@redhat.com>