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