[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#1107337: unblock: glibc/2.41-9 (pre-approval)



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: glibc@packages.debian.org
> Control: affects -1 + src:glibc
> User: release.debian.org@packages.debian.org
> 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 <aurelien@aurel32.net>
> 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 <aurel32@debian.org>  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


Reply to: