The GNU C Library version 2.41 is now available

Andreas K. Huettel dilfridge@gentoo.org
Thu Jan 30 09:43:18 GMT 2025


The GNU C Library
=================

The GNU C Library version 2.41 is now available.

The GNU C Library is used as *the* C library in the GNU system and in
GNU/Linux systems, as well as many other systems that use Linux as the
kernel.

The GNU C Library is primarily designed to be a portable and high
performance C library.  It follows all relevant standards including
ISO C23 and POSIX.1-2024.  It is also internationalized and has one of
the most complete internationalization interfaces known. 

The GNU C Library website is at http://www.gnu.org/software/libc/

Packages for the 2.41 release may be downloaded from:
        http://ftpmirror.gnu.org/libc/
        http://ftp.gnu.org/gnu/libc/

The mirror list is at http://www.gnu.org/order/ftp.html

Distributions are encouraged to track the release/* branches
corresponding to the releases they are using.  The release branches
will be updated with conservative bug fixes and new features while
retaining backwards compatibility.

NEWS for version 2.41
=====================

Major new features:

* Support for testing a glibc build with a set of C and C++ compilers
  different from the C and C++ compilers used to build glibc has been
  added:
  $ ../configure TEST_CC="gcc-6.4.1" TEST_CXX="g++-6.4.1"

  This includes support for testing the glibc build with Clang, e.g.,
  $ ../configure TEST_CC="clang" TEST_CXX="clang++"

  Some run-time failures with Clang are expected.

* The glibc test suite has been extended again significantly, with now
  6232 separate tests compared to 5408 in glibc-2.40.

* In /etc/resolv.conf and the RES_OPTIONS environment variable, option
  flags can now be prefixed with “-” to clear previously set flags.
  For example, if /etc/resolv.conf contains “options no-aaaa”, a
  process running with the RES_OPTIONS=-no-aaaa environment variable
  performs AAAA DNS queries when the glibc DNS stub resolver is used.

* The DNS stub resolver now supports the strict-error option.  If
  activated, getaddrinfo for the AF_UNSPEC address family (with dual
  A/AAAA DNS lookups) attemps to obtain an A/AAAA response pair from
  another DNS server if one of the responses indicates failure.  Without
  the strict-error option, getaddrinfo returns the A record data it has
  obtained even if the AAAA query failed.  The new strict error mode is
  incompatible with some DNS environments which do not follow the RFCs,
  which is why this mode is not enabled by default.  A future version
  of the library may turn it on by default, however.

* On Linux, the sched_setattr and sched_getattr functions have been
  added, for supporting parameterized scheduling policies such as
  SCHED_DEADLINE.

* The iconv program now supports converting files in place.  The program
  automatically uses a temporary file if required.

* Character encoding, character type info, and transliteration tables
  have been updated to Unicode 16.0.0.

* The following ISO C23 function families (introduced in TS
  18661-4:2015) are now supported in <math.h>.  Each family includes
  functions for float, double, long double, _FloatN and _FloatNx, and a
  type-generic macro in <tgmath.h>.

  - Trigonometric functions: acospi, asinpi, atan2pi, atanpi, cospi,
    sinpi, tanpi.

* The GNU C Library now supports a feature test macro _ISOC2Y_SOURCE to
  enable features from the draft ISO C2Y standard.  Only some features
  from this draft standard are supported by the GNU C Library, and as
  the draft is under active development, the set of features enabled by
  this macro is liable to change.  Features from C2Y are also enabled
  by _GNU_SOURCE, or by compiling with "gcc -std=gnu2y".

* Optimized and correctly rounded exp10m1f, exp2m1f, expm1f, log10f,
  log2p1f, log1pf, log10p1f, cbrtf, erff, erfcf, lgammaf, tgammaf,
  tanf, acosf, acoshf, asinf, asinhf, atanf, atan2f, atanhf, coshf,
  sinhf, and tanhf functions have been added from the CORE-MATH
  project <https://core-math.gitlabpages.inria.fr/>.

* A benchtest framework is now in place to track the performance of many
  (mostly numerical) functions.

* A new tunable, glibc.rtld.execstack, can be used to control whether an
  executable stack is allowed from the main program, either implicitly
  due to a mising GNU_STACK ELF header or explicit explicitly because
  of the executable bit in GNU_STACK.  The default is to allow
  executable stacks.

* Support for the extensible rseq ABI introduced in the Linux kernel
  version 6.3 has been added.  The size and alignment of the rseq area
  is now determined by auxiliary vector entries when provided by the
  running kernel.  This results in __rseq_size now exposing features
  past the original ABI which currently include 'node_id' and 'mm_cid'
  and will also allow exposing new features as they get added to future
  Linux kernels.

* The GNU C Library now supports the Guarded Control Stack extension
  that allows to use shadow stacks on AArch64 systems that support this
  extension.  Building the library with standard branch protection
  enabled while using a toolchain that supports GCS (binutils 2.44 and
  GCC 15 or later) will enable GCS support in glibc.  There is no
  special configuration flag.  GCS-enabled glibc is compatible with all
  existing executables and shared libraries and will run with and
  without GCS support in the system.  GCS is opt-in and can be
  controlled at runtime via the glibc.cpu.aarch64_gcs tunable. By
  default GCS is disabled.  Linux kernel supports this since 6.13.

* Significant effort has been put into improving the code generation
  and speed of mathematical functions in the vector mathematics library
  on AArch64, with regard to the Scalable Vector Extension (SVE) and
  Advanced SIMD (Neon) intrinsics.

* Support for memory protection keys on AArch64 systems with enabled
  Stage 1 permission overlays feature as introduced in Armv8.9 / 9.4
  has been added.

* On PowerPC64, support for the return-oriented programming protection
  instructions added in ISA 3.1 (Power10) has been added, as well as
  function optimizations for Power10.

* A new architecture type has been introduced internally to better
  support Hygon x86-64 processors.

Deprecated and removed features, and other changes affecting
compatibility:

* abort is now async-signal-safe and its implementation makes longjmp
  from the SIGABRT handler always abort if set up with setjmp.  Use
  sigsetjmp to keep the old behavior, where the handler does not stop
  the process execution.

* dlopen and dlmopen no longer make the stack executable if a shared
  library requires it, either implicitly because of a missing GNU_STACK
  ELF header (and default ABI permission having the executable bit set)
  or explicitly because of the executable bit in GNU_STACK, and the
  stack is not already executable.  Instead, loading such objects will
  fail.

* The nios2*-*-linux-gnu configurations are no longer supported.

* The big-endian ARC port (arceb-linux-gnu) has been removed.

Changes to build and runtime requirements:

* On recent Linux kernels with vDSO getrandom support, getrandom does
  not act as a "shall occur" cancellation point, in which case it might
  not issue a syscall or trigger a deferred cancellation event.

* Testing the GNU C Library requires GNU awk to be compiled with support
  for high precision arithmetic via the MPFR library.

Security related changes:

The following CVEs were fixed in this release, details of which can be
found in the advisories directory of the release tarball:

  GLIBC-SA-2025-0001:
    assert: Buffer overflow when printing assertion failure message
    (CVE-2025-0395)

The following bugs were resolved with this release:

  [6050] locale: iconv(1) buffers all of stdin in memory
  [10460] locale: iconv does not support in-place conversion
  [12683] nptl: Race conditions in pthread cancellation
  [14147] nptl: Async cancellation left active after longjmp out of
    signal handler
  [14799] network: RES_OPTIONS cannot disable options enabled in
    /etc/resolv.conf
  [17703] locale: iconv(1) EFAULTs reading the second non-mmapable input
  [20632] stdio: Buffer overflow in wchar IO (_IO_wfile_overflow)
  [23675] stdio: freopen() with "ccs=<charset>" leaves the stream
    unoriented
  [25847] nptl: pthread_cond_signal failed to wake up pthread_cond_wait
    due to a bug in undoing stealing
  [26275] libc: abort(3) is not signal-safe
  [27543] ports: Inconsistent behavior when handling FPSCR on SH
  [27821] stdio: double call to ungetc causes uninitialized memory
    reading. (also: ungetc causes memory leak)
  [29437] libc: arc4random is too slow
  [30009] build: unterminated options list in benchtest
  [30081] network: libresolv: timeout when running in single-request
    mode
  [30220] math: String to double returns incorrectly rounded value for
    hexadecimal subnormal
  [30584] libc: initstate and initstate_r crash when the state argument
    is unaligned
  [30647] stdio: scanf functions wrong on nan()
  [31394] libc: clone on sparc might fail with -EFAULT for no valid
    reason
  [31717] dynamic-link: TLS for library gets reallocated when loaded in
    two contexts.
  [31799] dynamic-link: -static-pie -Wl,-Ttext-segment=0x50000 doesn't
    work
  [31859] locale: Transliteration rules with two input characters like
    "ḌḌ" "DDH" do not work.
  [31890] network: DNS stub resolver ignores header-only error responses
  [31928] build: glibc doesn't compile if the compiler already define
    _FORTIFY_SOURCE
  [31968] libc: mremap implementation in C does not handle arguments
    correctly
  [31985] dynamic-link: la_objopen not called when ld.so is imported
    into a private namespace. However, la_objclose is called with an
    unknown cookie.
  [31997] libc: exit is not thread-safe, even when all atexit handlers
    are thread-safe
  [32026] libc: strerror, strsignal TLS not handled correctly for
    secondary namespaces (dlmopen, LD_AUDIT)
  [32033] locale: iconv (the program) does not truncate output file if
    input is empty
  [32040] nptl: CPU affinity test skeleton for sched_setaffinity and
    pthread_setaffinity_np can fail to report failure.
  [32042] build: Compilation issue for tst-resolv-short-response.c with
    older GCC
  [32045] math: nan() / strtod() incorrectly set errno for overflowing
    nan payload
  [32046] locale: iconv -c fails to report input encoding errors if
    output buffer is full
  [32047] libc: Tunables may incorrectly set Prefer_PMINUB_for_stringop
  [32050] locale: iconv - - < /dev/null fails with Bad file descriptor
  [32052] libc: stdlib.h's use of 'sz' identifier causes libstdc++ test
    failure
  [32065] dynamic-link: _dl_fini does not call la_objclose for proxy
    link maps
  [32066] dynamic-link: dlclose signals la_activity (LA_ACT_DELETE)
    after la_objclose calls
  [32078] string: Random __strchrnul_evex512 failures
  [32124] libc: readdir_r does not relay errors reported by the kernel
  [32125] libc: powerpc: Missing TOC stub in __syscall_cancel_arch for
    powerpc64le-linux-gnu
  [32126] libc: readdir64_r: Do not skip entries with zero d_ino values
  [32128] libc: Compat readdir64_r (__old_readdir64_r) does not enforce
    NAME_MAX limit
  [32134] stdio: freopen does not clear flags2 (FD_CLOEXEC etc)
  [32137] libc: libio/tst-stderr-compat, libio/tst-bz24228, math/test-
    matherr-2, nptl/tst-pthread_kill-exited fails on powerpc-unknown-
    linux-gnu
  [32140] stdio: freopen leaks memory on failure
  [32145] libc: New stdlib/tst-strtod1i, stdlib/tst-strtod3, stdlib/tst-
    strtod4, stdlib/tst-strtod5i failures on powerpc64le-linux-gnu
  [32148] stdio: Memory corruption with ancient i386 binaries using
    stdio
  [32168] localedata: Update locale data to Unicode 16.0.0
  [32173] libc: sparc: restartable syscalls are broken
  [32192] build: s390: utf16-utf32-z9.c fails to build w/ -fomit-frame-
    pointer
  [32197] locale: FAIL: iconv/tst-iconv_prog-buffer failures
  [32212] string: x86_64/strcmp caused 25% performance drop by commit
    84e7c46df
  [32214] libc: random_bits always returns the same value if getrandom
    fails
  [32215] libc: Signal handlers after fork may encounter missing robust
    mutex list
  [32228] libc: .preinit_array in /lib/riscv64-linux-gnu/Scrt1.o is not
    properly aligned
  [32231] dynamic-link: ldconfig auxcache format change in 2.36
  [32233] libc: error calls va_end twice.
  [32234] hurd: missing va_end call in fcntl.c
  [32245] build: glibc -Wstringop-overflow= build failure on hppa
  [32280] localedata: Enable transliteration rules with two input
    characters in scn_IT
  [32283] libc: Compilation issue for tst-syscall-restart.c with GCC
    10.2.1
  [32323] localedata: eo: Incorrect first day of week and first week of
    year
  [32344] string: Assembler warnings when building strcpy-evex.S and
    strncpy-evex.S
  [32350] hurd: function __xpg_strerror_r crashes for specific arguments
  [32360] stdio: Compilation issue for tst-printf-format-skeleton.c with
    GCC 10.2.1
  [32366] malloc: malloc test failures with GCC 15
  [32380] locale: dcigettext can cause SIGSEGV when domain name is too
    long
  [32414] libc: [x86_64 regression] tst-strtod5i.c:124:(.text+0x47c):
    undefined reference to `__copysignf128'
  [32418] math: __XXX math functions are declared, but not provided
  [32420] build: GCC 6 can't build glibc 2.41
  [32440] libc: getrandom() in glibc 2.41 (development) returns EINVAL
    as retcode instead of errno on powerpc64le
  [32448] libc: iconv reports failure with successful transliteration
  [32450] libc: system() does not return -1 if a child process can't be
    created
  [32465] nss: ./getaddrinfo.c:1884:11: error: variable 'endp' is used
    uninitialized whenever '||' condition is true [-Werror,-Wsometimes-
    uninitialized]
  [32470] dynamic-link: Integer truncation during x86-64 cache size
    computation
  [32488] libc: Glibc failed to build with CET enabled
  [32492] libc: New test failures
  [32494] build: Compilation issue with GCC 14.2.1
  [32508] dynamic-link: ldd: /lib/ld-linux.so.2: cannot execute binary
    file: Exec format error
  [32512] dynamic-link: failure to build on loong, undefined reference
    to `stpcpy'
  [32543] build: x32 glibc is miscompiled
  [32588] libc: [2.41 regression] bash crashes with 'realloc(): invalid
    pointer' with `env -i PATH=`

Release Notes
=============

https://sourceware.org/glibc/wiki/Release/2.41

Contributors
============

This release was made possible by the contributions of many people.
The maintainers are grateful to everyone who has contributed
changes or bug reports.  These include:

Aaron Merey
Adhemerval Zanella
Alejandro Colomar
Andreas K. Hüttel
Andreas Schwab
Andrew Pinski
Arjun Shankar
Aurelien Jarno
Avinal Kumar
Bruno Haible
Carlos O'Donell
Carmen Bianca BAKKER
DJ Delorie
Dan Luedtke
Darius Rad
Dmitry Chestnykh
Fangrui Song
Feifei Wang
Flavio Cruz
Florian Weimer
Frank Barrus
Frédéric Bérat
H.J. Lu
Henrik Lindström
Jeevitha Palanisamy
Joana Cruz
Joe Ramsay
John David Anglin
Jonathan Wakely
Joseph Myers
Julian Zhu
Khem Raj
Kuan-Wei Chiu
Lenard Mollenkopf
Lukas Bulwahn
Luna Lamb
Maciej W. Rozycki
Mahesh Bodapati
Malte Skarupke
Mark Wielaard
Matthew Sterrett
Miao Wang
Michael Jeanson
Michael Karcher
Miguel Martín
Mike FABIAN
Noah Goldstein
Paul Eggert
Paul Pluzhnikov
Paul Zimmermann
Pavel Kozlov
Peter Ammon
Peter Bergner
Pierre Blanchard
Sachin Monga
Sam James
Samuel Thibault
Sergey Bugaev
Sergey Kolosov
Siddhesh Poyarekar
Stafford Horne
Stefan Liebler
Szabolcs Nagy
Tulio Magno Quites Machado Filho
Vincent Lefevre
Wangyang Guo
Wilco Dijkstra
Xi Ruoyao
Yannick Le Pennec
Yat Long Poon
Yury Khrustalev
Zhaoming Luo
caiyinyu
gfleury
jeevitha
k4lizen
mengqinggang
mirabilos

We would like to call out the following and thank them for their
tireless patch review:

Adhemerval Zanella
Andreas K. Hüttel
Andrew Pinski
Arjun Shankar
Carlos O'Donell
DJ Delorie
Florian Weimer
H.J. Lu
Jing Li
Maciej W. Rozycki
Mathieu Desnoyers
Michael Jeanson
Mike FABIAN
Noah Goldstein
Oleg Endo
Palmer Dabbelt
Patsy Griffin
Paul Eggert
Paul E. Murphy
Peter Bergner
Sam James
Siddhesh Poyarekar
Sunil K Pandey
Szabolcs Nagy
Wilco Dijkstra
Xi Ruoyao
Yury Khrustalev

-- 
Andreas K. Hüttel
dilfridge@gentoo.org
Gentoo Linux developer
(council, toolchain, base-system, perl, libreoffice)

--
PD Dr. Andreas K. Huettel
Institute for Experimental and Applied Physics
University of Regensburg
93040 Regensburg
Germany

e-mail andreas.huettel@ur.de
http://www.akhuettel.de/
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 981 bytes
Desc: This is a digitally signed message part.
URL: <https://sourceware.org/pipermail/libc-alpha/attachments/20250130/e5538e13/attachment-0001.sig>


More information about the Libc-alpha mailing list