Control: tags -1 confirmed moreinfo On 2025-06-05 23:16:55 +0200, Aurelien Jarno wrote: > Package: release.debian.org > Severity: normal > Tags: trixie security > X-Debbugs-Cc: [email protected] > Control: affects -1 + src:glibc > User: [email protected] > Usertags: unblock > > Please pre-approve unblocking of package glibc/2.41-9
Please go ahead and remove the moreinfo tag once it has been uploaded and built everywhere. Cheers > > [ Reason ] > The upstream stable branch got a few fixes since the last upload > and this update pulls them into the debian package. From the changelog > > - Fix loading TLS-using modules using LD_AUDIT. > => This fix a crash when TLS-using modules are used through LD_AUDIT. > The details about the issue are available upstream: > https://sourceware.org/bugzilla/show_bug.cgi?id=32412 > > - Add tests for CVE-2025-4802. > => The issue in CVE-2025-4802 was fixed in glibc 2.39, but not > identified as a security bug at that time. This is the case now so > additional tests have been added. > > - Fix swapped wcsncpy and wcpncpy function names in IFUNC > definition. > => The name of the wcsncpy and wcpncpy functions in the IFUNC definition > were swapped. Fortunately it is only used to determine the return type > of the functions, which is a wchar_t in both case. Better fix this > anyway. > > - Fix elf/tst-execstack-prog-static-tunable on sparc64. > => This test has been added in 2.41-7, and uncovered a bug on sparc64. > This only changes sparc64 specific code, so it has no impact on the > release architecture. > > IN ADDITION, the fixes for CVE-2025-5702 and CVE-2025-5745, affecting > the strcmp and strncmp on Power 10 CPUs, will be available soon and > backported to this upstream stable branch. If this get pre-approved, I > intend to upload glibc to sid as soon as the fix is available. > > See https://sourceware.org/pipermail/libc-alpha/2025-June/167381.html > See https://sourceware.org/pipermail/libc-alpha/2025-June/167405.html > > [ Impact ] > If the unblock isn't granted: > - Users with a Power 10 CPU will be vulnerable to CVE-2025-5702 and > CVE-2025-5745 > - Difference with the upstream stable branch will increase, which might > make future updates more complicated > > [ Tests ] > The TLS / LD_AUDIT changes come with additional tests. Overall tests > represent the > major part of the debdiff. > > [ Risks ] > I believe the risks are quite low, for release architectures except > ppc64el, the changes only affect the ld.so binary, and the version > number in the libc.so binary. Other binaries are bit to bit identical to > the previous version. The changes to ld.so are only relevant when using > LD_AUDIT. > > [ Checklist ] > [x] all changes are documented in the d/changelog > [x] I reviewed all changes and I approve them > [x] attach debdiff against the package in testing > > [ Other info ] > The debdiff doesn't include the fixes for CVE-2025-5702 and > CVE-2025-5745. I expect the fix to only change: > sysdeps/powerpc/powerpc64/le/power10/strcmp.S. > sysdeps/powerpc/powerpc64/le/power10/strncmp.S. > > unblock glibc/2.41-9 > commit 23058152a29832ceeadcd1507e53e84c21a3508d > Author: Aurelien Jarno <[email protected]> > Date: Thu Jun 5 21:24:38 2025 +0200 > > debian/patches/git-updates.diff: update from upstream stable branch: > > * debian/patches/git-updates.diff: update from upstream stable branch: > - Fix loading TLS-using modules using LD_AUDIT. > - Add tests for CVE-2025-4802. > - Fix swapped wcsncpy and wcpncpy function names in IFUNC definition. > - Fix elf/tst-execstack-prog-static-tunable on sparc64. > > diff --git a/debian/changelog b/debian/changelog > index 920d3433..8362e02a 100644 > --- a/debian/changelog > +++ b/debian/changelog > @@ -1,3 +1,14 @@ > +glibc (2.41-9) UNRELEASED; urgency=medium > + > + [ Aurelien Jarno ] > + * debian/patches/git-updates.diff: update from upstream stable branch: > + - Fix loading TLS-using modules using LD_AUDIT. > + - Add tests for CVE-2025-4802. > + - Fix swapped wcsncpy and wcpncpy function names in IFUNC definition. > + - Fix elf/tst-execstack-prog-static-tunable on sparc64. > + > + -- Aurelien Jarno <[email protected]> Thu, 05 Jun 2025 21:05:55 +0200 > + > glibc (2.41-8) unstable; urgency=medium > > [ Samuel Thibault ] > diff --git a/debian/patches/git-updates.diff b/debian/patches/git-updates.diff > index ea94532b..15deba92 100644 > --- a/debian/patches/git-updates.diff > +++ b/debian/patches/git-updates.diff > @@ -22,10 +22,10 @@ index d0108d2caa..aa547a443f 100644 > $(common-objdir):$(subst $(empty) ,:,$(patsubst > ../$(subdir),.,$(rpath-dirs:%=$(common-objpfx)%))) > else # build-static > diff --git a/NEWS b/NEWS > -index b11422b060..51586aaad7 100644 > +index b11422b060..90d090ea77 100644 > --- a/NEWS > +++ b/NEWS > -@@ -5,6 +5,31 @@ See the end for copying conditions. > +@@ -5,6 +5,34 @@ See the end for copying conditions. > Please send GNU C library bug reports via <https://sourceware.org/bugzilla/> > using `glibc' in the "product" field. > > @@ -53,6 +53,9 @@ index b11422b060..51586aaad7 100644 > + [32882] tst-audit10 fails with SIGILL on CPUs without AVX > + [32897] dynamic-link: pthread_getattr_np fails when executable stack > + tunable is set > ++ [32981] ports: elf/tst-execstack-prog-static-tunable fails on > ++ sparc64-linux-gnu > ++ [32987] elf: Fix subprocess status handling for tst-dlopen-sgid > + > Version 2.41 > > @@ -904,7 +907,7 @@ index 050bfa65e3..57cd24c87d 100644 > AC_COMPILE_IFELSE([AC_LANG_SOURCE([[#ifdef PIE_UNSUPPORTED > # error PIE is not supported > diff --git a/elf/Makefile b/elf/Makefile > -index 4b1d0d8741..3a3ae56a24 100644 > +index 4b1d0d8741..f42cb154fb 100644 > --- a/elf/Makefile > +++ b/elf/Makefile > @@ -61,6 +61,7 @@ dl-routines = \ > @@ -915,7 +918,23 @@ index 4b1d0d8741..3a3ae56a24 100644 > dl-fini \ > dl-init \ > dl-load \ > -@@ -567,9 +568,11 @@ tests-execstack-yes = \ > +@@ -266,6 +267,7 @@ tests-static-normal := \ > + tst-array1-static \ > + tst-array5-static \ > + tst-dl-iter-static \ > ++ tst-dlopen-sgid \ > + tst-dst-static \ > + tst-env-setuid-static \ > + tst-getauxval-static \ > +@@ -379,6 +381,7 @@ tests += \ > + tst-align3 \ > + tst-audit-tlsdesc \ > + tst-audit-tlsdesc-dlopen \ > ++ tst-audit-tlsdesc-dlopen2 \ > + tst-audit1 \ > + tst-audit2 \ > + tst-audit8 \ > +@@ -567,9 +570,11 @@ tests-execstack-yes = \ > tst-execstack \ > tst-execstack-needed \ > tst-execstack-prog \ > @@ -928,7 +947,23 @@ index 4b1d0d8741..3a3ae56a24 100644 > # tests-execstack-static-yes > ifeq (yes,$(run-built-tests)) > tests-execstack-special-yes = \ > -@@ -1144,6 +1147,10 @@ tests-pie += \ > +@@ -863,6 +868,7 @@ modules-names += \ > + tst-auditmanymod8 \ > + tst-auditmanymod9 \ > + tst-auditmod-tlsdesc \ > ++ tst-auditmod-tlsdesc2 \ > + tst-auditmod1 \ > + tst-auditmod11 \ > + tst-auditmod12 \ > +@@ -905,6 +911,7 @@ modules-names += \ > + tst-dlmopen1mod \ > + tst-dlopen-auditdup-auditmod \ > + tst-dlopen-auditdupmod \ > ++ tst-dlopen-sgid-mod \ > + tst-dlopen-tlsreinitmod1 \ > + tst-dlopen-tlsreinitmod2 \ > + tst-dlopen-tlsreinitmod3 \ > +@@ -1144,6 +1151,10 @@ tests-pie += \ > tst-pie1 \ > tst-pie2 \ > # tests-pie > @@ -939,7 +974,7 @@ index 4b1d0d8741..3a3ae56a24 100644 > ifneq (,$(load-address-ldflag)) > tests += \ > tst-pie-address \ > -@@ -1159,6 +1166,10 @@ tests += \ > +@@ -1159,6 +1170,10 @@ tests += \ > tests-static += \ > tst-pie-address-static \ > # tests-static > @@ -950,7 +985,7 @@ index 4b1d0d8741..3a3ae56a24 100644 > LDFLAGS-tst-pie-address-static += \ > $(load-address-ldflag)=$(pde-load-address) > endif > -@@ -1988,6 +1999,9 @@ $(objpfx)tst-execstack.out: > $(objpfx)tst-execstack-mod.so > +@@ -1988,6 +2003,9 @@ $(objpfx)tst-execstack.out: > $(objpfx)tst-execstack-mod.so > CPPFLAGS-tst-execstack.c += -DUSE_PTHREADS=0 > LDFLAGS-tst-execstack = -Wl,-z,noexecstack > LDFLAGS-tst-execstack-mod.so = -Wl,-z,execstack > @@ -960,7 +995,7 @@ index 4b1d0d8741..3a3ae56a24 100644 > > $(objpfx)tst-execstack-needed: $(objpfx)tst-execstack-mod.so > LDFLAGS-tst-execstack-needed = -Wl,-z,noexecstack > -@@ -1996,7 +2010,18 @@ LDFLAGS-tst-execstack-prog = -Wl,-z,execstack > +@@ -1996,7 +2014,18 @@ LDFLAGS-tst-execstack-prog = -Wl,-z,execstack > CFLAGS-tst-execstack-prog.c += -Wno-trampolines > CFLAGS-tst-execstack-mod.c += -Wno-trampolines > > @@ -979,7 +1014,7 @@ index 4b1d0d8741..3a3ae56a24 100644 > CFLAGS-tst-execstack-prog-static.c += -Wno-trampolines > > ifeq (yes,$(build-hardcoded-path-in-tests)) > -@@ -2074,6 +2099,7 @@ $(objpfx)tst-array5-static-cmp.out: > tst-array5-static.exp \ > +@@ -2074,6 +2103,7 @@ $(objpfx)tst-array5-static-cmp.out: > tst-array5-static.exp \ > > CFLAGS-tst-pie1.c += $(pie-ccflag) > CFLAGS-tst-pie2.c += $(pie-ccflag) > @@ -987,6 +1022,22 @@ index 4b1d0d8741..3a3ae56a24 100644 > CFLAGS-tst-pie-address.c += $(pie-ccflag) > > $(objpfx)tst-piemod1.so: $(libsupport) > +@@ -3189,6 +3219,9 @@ $(objpfx)tst-audit-tlsdesc.out: > $(objpfx)tst-auditmod-tlsdesc.so > + tst-audit-tlsdesc-ENV = LD_AUDIT=$(objpfx)tst-auditmod-tlsdesc.so > + $(objpfx)tst-audit-tlsdesc-dlopen.out: $(objpfx)tst-auditmod-tlsdesc.so > + tst-audit-tlsdesc-dlopen-ENV = LD_AUDIT=$(objpfx)tst-auditmod-tlsdesc.so > ++$(objpfx)tst-audit-tlsdesc-dlopen2.out: $(objpfx)tst-auditmod-tlsdesc2.so \ > ++ $(patsubst %, $(objpfx)%.so, $(tlsmod17a-modules)) > ++tst-audit-tlsdesc-dlopen2-ENV = LD_AUDIT=$(objpfx)tst-auditmod-tlsdesc2.so > + > + $(objpfx)tst-dlmopen-twice.out: \ > + $(objpfx)tst-dlmopen-twice-mod1.so \ > +@@ -3392,3 +3425,5 @@ $(objpfx)tst-nolink-libc-2: $(objpfx)tst-nolink-libc.o > + -Wl,--dynamic-linker=$(objpfx)ld.so > + $(objpfx)tst-nolink-libc-2.out: $(objpfx)tst-nolink-libc-2 $(objpfx)ld.so > + $< > $@ 2>&1; $(evaluate-test) > ++ > ++$(objpfx)tst-dlopen-sgid.out: $(objpfx)tst-dlopen-sgid-mod.so > diff --git a/elf/dl-execstack-tunable.c b/elf/dl-execstack-tunable.c > new file mode 100644 > index 0000000000..e3b638aeaa > @@ -1096,6 +1147,24 @@ index a7d5a5e8ab..0388e23448 100644 > > call_function_static_weak (_dl_find_object_init); > > +diff --git a/elf/dl-tls.c b/elf/dl-tls.c > +index 8306a39e8d..5686df5ad2 100644 > +--- a/elf/dl-tls.c > ++++ b/elf/dl-tls.c > +@@ -560,6 +560,13 @@ _dl_resize_dtv (dtv_t *dtv, size_t max_modid) > + if (newp == NULL) > + oom (); > + memcpy (newp, &dtv[-1], (2 + oldsize) * sizeof (dtv_t)); > ++#ifdef SHARED > ++ /* Auditors can trigger a DTV resize event while the full malloc > ++ is not yet in use. Mark the new DTV allocation as the > ++ initial allocation. */ > ++ if (!__rtld_malloc_is_complete ()) > ++ GL(dl_initial_dtv) = &newp[1]; > ++#endif > + } > + else > + { > diff --git a/elf/dl-tunables.list b/elf/dl-tunables.list > index 0b6721bc51..c03c9967f0 100644 > --- a/elf/dl-tunables.list > @@ -1126,6 +1195,248 @@ index 00bec15316..7a8aa56377 100644 > > /* If the current libname is different from the SONAME, add the > latter as well. */ > +diff --git a/elf/tst-audit-tlsdesc-dlopen2.c > b/elf/tst-audit-tlsdesc-dlopen2.c > +new file mode 100644 > +index 0000000000..7ba2c4129a > +--- /dev/null > ++++ b/elf/tst-audit-tlsdesc-dlopen2.c > +@@ -0,0 +1,46 @@ > ++/* Loading TLS-using modules from auditors (bug 32412). Main program. > ++ Copyright (C) 2021-2025 Free Software Foundation, Inc. > ++ This file is part of the GNU C Library. > ++ > ++ The GNU C Library is free software; you can redistribute it and/or > ++ modify it under the terms of the GNU Lesser General Public > ++ License as published by the Free Software Foundation; either > ++ version 2.1 of the License, or (at your option) any later version. > ++ > ++ The GNU C Library is distributed in the hope that it will be useful, > ++ but WITHOUT ANY WARRANTY; without even the implied warranty of > ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU > ++ Lesser General Public License for more details. > ++ > ++ You should have received a copy of the GNU Lesser General Public > ++ License along with the GNU C Library; if not, see > ++ <https://www.gnu.org/licenses/>. */ > ++ > ++#include <support/xdlfcn.h> > ++#include <stdio.h> > ++ > ++static int > ++do_test (void) > ++{ > ++ puts ("info: start of main program"); > ++ > ++ /* Load TLS-using modules, to trigger DTV resizing. The dynamic > ++ linker will load them again (requiring their own TLS) because the > ++ dlopen calls from the auditor were in the auditing namespace. */ > ++ for (int i = 1; i <= 19; ++i) > ++ { > ++ char dso[30]; > ++ snprintf (dso, sizeof (dso), "tst-tlsmod17a%d.so", i); > ++ char sym[30]; > ++ snprintf (sym, sizeof(sym), "tlsmod17a%d", i); > ++ > ++ void *handle = xdlopen (dso, RTLD_LAZY); > ++ int (*func) (void) = xdlsym (handle, sym); > ++ /* Trigger TLS allocation. */ > ++ func (); > ++ } > ++ > ++ return 0; > ++} > ++ > ++#include <support/test-driver.c> > +diff --git a/elf/tst-auditmod-tlsdesc2.c b/elf/tst-auditmod-tlsdesc2.c > +new file mode 100644 > +index 0000000000..50275cd34d > +--- /dev/null > ++++ b/elf/tst-auditmod-tlsdesc2.c > +@@ -0,0 +1,59 @@ > ++/* Loading TLS-using modules from auditors (bug 32412). Audit module. > ++ Copyright (C) 2021-2025 Free Software Foundation, Inc. > ++ This file is part of the GNU C Library. > ++ > ++ The GNU C Library is free software; you can redistribute it and/or > ++ modify it under the terms of the GNU Lesser General Public > ++ License as published by the Free Software Foundation; either > ++ version 2.1 of the License, or (at your option) any later version. > ++ > ++ The GNU C Library is distributed in the hope that it will be useful, > ++ but WITHOUT ANY WARRANTY; without even the implied warranty of > ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU > ++ Lesser General Public License for more details. > ++ > ++ You should have received a copy of the GNU Lesser General Public > ++ License along with the GNU C Library; if not, see > ++ <https://www.gnu.org/licenses/>. */ > ++ > ++#include <dlfcn.h> > ++#include <link.h> > ++#include <stdbool.h> > ++#include <stdio.h> > ++#include <unistd.h> > ++ > ++unsigned int > ++la_version (unsigned int version) > ++{ > ++ /* Open some modules, to trigger DTV resizing before the switch to > ++ the main malloc. */ > ++ for (int i = 1; i <= 19; ++i) > ++ { > ++ char dso[30]; > ++ snprintf (dso, sizeof (dso), "tst-tlsmod17a%d.so", i); > ++ char sym[30]; > ++ snprintf (sym, sizeof(sym), "tlsmod17a%d", i); > ++ > ++ void *handle = dlopen (dso, RTLD_LAZY); > ++ if (handle == NULL) > ++ { > ++ printf ("error: dlmopen from auditor: %s\n", dlerror ()); > ++ fflush (stdout); > ++ _exit (1); > ++ } > ++ int (*func) (void) = dlsym (handle, sym); > ++ if (func == NULL) > ++ { > ++ printf ("error: dlsym from auditor: %s\n", dlerror ()); > ++ fflush (stdout); > ++ _exit (1); > ++ } > ++ /* Trigger TLS allocation. */ > ++ func (); > ++ } > ++ > ++ puts ("info: TLS-using modules loaded from auditor"); > ++ fflush (stdout); > ++ > ++ return LAV_CURRENT; > ++} > +diff --git a/elf/tst-dlopen-sgid-mod.c b/elf/tst-dlopen-sgid-mod.c > +new file mode 100644 > +index 0000000000..5eb79eef48 > +--- /dev/null > ++++ b/elf/tst-dlopen-sgid-mod.c > +@@ -0,0 +1 @@ > ++/* Opening this object should not succeed. */ > +diff --git a/elf/tst-dlopen-sgid.c b/elf/tst-dlopen-sgid.c > +new file mode 100644 > +index 0000000000..5688b79f2e > +--- /dev/null > ++++ b/elf/tst-dlopen-sgid.c > +@@ -0,0 +1,112 @@ > ++/* Test case for ignored LD_LIBRARY_PATH in static startug (bug 32976). > ++ Copyright (C) 2025 Free Software Foundation, Inc. > ++ This file is part of the GNU C Library. > ++ > ++ The GNU C Library is free software; you can redistribute it and/or > ++ modify it under the terms of the GNU Lesser General Public > ++ License as published by the Free Software Foundation; either > ++ version 2.1 of the License, or (at your option) any later version. > ++ > ++ The GNU C Library is distributed in the hope that it will be useful, > ++ but WITHOUT ANY WARRANTY; without even the implied warranty of > ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU > ++ Lesser General Public License for more details. > ++ > ++ You should have received a copy of the GNU Lesser General Public > ++ License along with the GNU C Library; if not, see > ++ <https://www.gnu.org/licenses/>. */ > ++ > ++#include <dlfcn.h> > ++#include <gnu/lib-names.h> > ++#include <stddef.h> > ++#include <stdint.h> > ++#include <stdlib.h> > ++#include <string.h> > ++#include <support/capture_subprocess.h> > ++#include <support/check.h> > ++#include <support/support.h> > ++#include <support/temp_file.h> > ++#include <support/test-driver.h> > ++#include <sys/wait.h> > ++#include <unistd.h> > ++ > ++/* This is the name of our test object. Use a custom module for > ++ testing, so that this object does not get picked up from the system > ++ path. */ > ++static const char dso_name[] = "tst-dlopen-sgid-mod.so"; > ++ > ++/* Used to mark the recursive invocation. */ > ++static const char magic_argument[] = "run-actual-test"; > ++ > ++static int > ++do_test (void) > ++{ > ++/* Pathname of the directory that receives the shared objects this > ++ test attempts to load. */ > ++ char *libdir = support_create_temp_directory ("tst-dlopen-sgid-"); > ++ > ++ /* This is supposed to be ignored and stripped. */ > ++ TEST_COMPARE (setenv ("LD_LIBRARY_PATH", libdir, 1), 0); > ++ > ++ /* Copy of libc.so.6. */ > ++ { > ++ char *from = xasprintf ("%s/%s", support_objdir_root, LIBC_SO); > ++ char *to = xasprintf ("%s/%s", libdir, LIBC_SO); > ++ add_temp_file (to); > ++ support_copy_file (from, to); > ++ free (to); > ++ free (from); > ++ } > ++ > ++ /* Copy of the test object. */ > ++ { > ++ char *from = xasprintf ("%s/elf/%s", support_objdir_root, dso_name); > ++ char *to = xasprintf ("%s/%s", libdir, dso_name); > ++ add_temp_file (to); > ++ support_copy_file (from, to); > ++ free (to); > ++ free (from); > ++ } > ++ > ++ free (libdir); > ++ > ++ int status = support_capture_subprogram_self_sgid (magic_argument); > ++ > ++ if (WEXITSTATUS (status) == EXIT_UNSUPPORTED) > ++ return EXIT_UNSUPPORTED; > ++ > ++ if (!WIFEXITED (status)) > ++ FAIL_EXIT1 ("Unexpected exit status %d from child process\n", status); > ++ > ++ return 0; > ++} > ++ > ++static void > ++alternative_main (int argc, char **argv) > ++{ > ++ if (argc == 2 && strcmp (argv[1], magic_argument) == 0) > ++ { > ++ if (getgid () == getegid ()) > ++ /* This can happen if the file system is mounted nosuid. */ > ++ FAIL_UNSUPPORTED ("SGID failed: GID and EGID match (%jd)\n", > ++ (intmax_t) getgid ()); > ++ > ++ /* Should be removed due to SGID. */ > ++ TEST_COMPARE_STRING (getenv ("LD_LIBRARY_PATH"), NULL); > ++ > ++ TEST_VERIFY (dlopen (dso_name, RTLD_NOW) == NULL); > ++ { > ++ const char *message = dlerror (); > ++ TEST_COMPARE_STRING (message, > ++ "tst-dlopen-sgid-mod.so:" > ++ " cannot open shared object file:" > ++ " No such file or directory"); > ++ } > ++ > ++ support_record_failure_barrier (); > ++ exit (EXIT_SUCCESS); > ++ } > ++} > ++ > ++#define PREPARE alternative_main > ++#include <support/test-driver.c> > diff --git a/elf/tst-execstack-prog-static-tunable.c > b/elf/tst-execstack-prog-static-tunable.c > new file mode 100644 > index 0000000000..88b0ca1263 > @@ -1518,6 +1829,51 @@ index 0000000000..f5f484c83a > +} > + > +#include <support/test-driver.c> > +diff --git a/support/capture_subprocess.h b/support/capture_subprocess.h > +index 91d75e5d6b..77140430d2 100644 > +--- a/support/capture_subprocess.h > ++++ b/support/capture_subprocess.h > +@@ -45,8 +45,7 @@ struct support_capture_subprocess > support_capture_subprogram > + /* Copy the running program into a setgid binary and run it with CHILD_ID > + argument. If execution is successful, return the exit status of the > child > + program, otherwise return a non-zero failure exit code. */ > +-int support_capture_subprogram_self_sgid > +- (char *child_id); > ++int support_capture_subprogram_self_sgid (const char *child_id); > + > + /* Deallocate the subprocess data captured by > + support_capture_subprocess. */ > +diff --git a/support/support_capture_subprocess.c > b/support/support_capture_subprocess.c > +index c3ef478d17..d99aafd370 100644 > +--- a/support/support_capture_subprocess.c > ++++ b/support/support_capture_subprocess.c > +@@ -110,7 +110,7 @@ support_capture_subprogram (const char *file, char > *const argv[], > + safely make it SGID with the TARGET group ID. Then runs the > + executable. */ > + static int > +-copy_and_spawn_sgid (char *child_id, gid_t gid) > ++copy_and_spawn_sgid (const char *child_id, gid_t gid) > + { > + char *dirname = xasprintf ("%s/tst-tunables-setuid.%jd", > + test_dir, (intmax_t) getpid ()); > +@@ -182,7 +182,7 @@ copy_and_spawn_sgid (char *child_id, gid_t gid) > + ret = 0; > + infd = outfd = -1; > + > +- char * const args[] = {execname, child_id, NULL}; > ++ char * const args[] = {execname, (char *) child_id, NULL}; > + > + status = support_subprogram_wait (args[0], args); > + > +@@ -211,7 +211,7 @@ err: > + } > + > + int > +-support_capture_subprogram_self_sgid (char *child_id) > ++support_capture_subprogram_self_sgid (const char *child_id) > + { > + gid_t target = 0; > + const int count = 64; > diff --git a/sysdeps/aarch64/fpu/asinh_sve.c > b/sysdeps/aarch64/fpu/asinh_sve.c > index 0889f79dbb..ff6b71390c 100644 > --- a/sysdeps/aarch64/fpu/asinh_sve.c > @@ -3303,6 +3659,36 @@ index a30892f080..dcc3e0883b 100644 > #endif > return lazy; > } > +diff --git a/sysdeps/sparc/sparc32/start.S b/sysdeps/sparc/sparc32/start.S > +index 694b020ce0..cef7c96cac 100644 > +--- a/sysdeps/sparc/sparc32/start.S > ++++ b/sysdeps/sparc/sparc32/start.S > +@@ -73,6 +73,10 @@ _start: > + be NULL. */ > + mov %g1, %o5 > + > ++ /* Provide the highest stack address to update the __libc_stack_end (used > ++ to enable executable stacks if required). */ > ++ st %sp, [%sp+23*4] > ++ > + /* Let libc do the rest of the initialization, and call main. */ > + call __libc_start_main > + nop > +diff --git a/sysdeps/sparc/sparc64/start.S b/sysdeps/sparc/sparc64/start.S > +index c9c25c2e47..08e1e77210 100644 > +--- a/sysdeps/sparc/sparc64/start.S > ++++ b/sysdeps/sparc/sparc64/start.S > +@@ -74,6 +74,10 @@ _start: > + be NULL. */ > + mov %g1, %o5 > + > ++ /* Provide the highest stack address to update the __libc_stack_end (used > ++ to enable executable stacks if required). */ > ++ stx %sp, [%sp+STACK_BIAS+22*8] > ++ > + /* Let libc do the rest of the initialization, and call main. */ > + call __libc_start_main > + nop > diff --git a/sysdeps/unix/sysv/linux/aarch64/Makefile > b/sysdeps/unix/sysv/linux/aarch64/Makefile > index 1fdad67fae..0839f0b08c 100644 > --- a/sysdeps/unix/sysv/linux/aarch64/Makefile > @@ -5095,6 +5481,28 @@ index 0000000000..5539b6c61c > +# define __tanh __tanh_sse2 > +#endif > +#include <sysdeps/ieee754/dbl-64/s_tanh.c> > +diff --git a/sysdeps/x86_64/multiarch/ifunc-impl-list.c > b/sysdeps/x86_64/multiarch/ifunc-impl-list.c > +index a8349775df..c2dcadd1a9 100644 > +--- a/sysdeps/x86_64/multiarch/ifunc-impl-list.c > ++++ b/sysdeps/x86_64/multiarch/ifunc-impl-list.c > +@@ -922,7 +922,7 @@ __libc_ifunc_impl_list (const char *name, struct > libc_ifunc_impl *array, > + (CPU_FEATURE_USABLE (AVX2) > + && CPU_FEATURE_USABLE (BMI2)), > + __wcsncpy_avx2) > +- X86_IFUNC_IMPL_ADD_V2 (array, i, wcpncpy, > ++ X86_IFUNC_IMPL_ADD_V2 (array, i, wcsncpy, > + 1, > + __wcsncpy_generic)) > + > +@@ -952,7 +952,7 @@ __libc_ifunc_impl_list (const char *name, struct > libc_ifunc_impl *array, > + (CPU_FEATURE_USABLE (AVX2) > + && CPU_FEATURE_USABLE (BMI2)), > + __wcpncpy_avx2) > +- X86_IFUNC_IMPL_ADD_V2 (array, i, wcsncpy, > ++ X86_IFUNC_IMPL_ADD_V2 (array, i, wcpncpy, > + 1, > + __wcpncpy_generic)) > + > diff --git a/sysdeps/x86_64/tst-auditmod10b.c > b/sysdeps/x86_64/tst-auditmod10b.c > index 6eb21b6f06..0b994ef0f0 100644 > --- a/sysdeps/x86_64/tst-auditmod10b.c -- Sebastian Ramacher

