The GNU C Library version 2.33 is now available
Mon Feb 1 19:33:47 GMT 2021
The GNU C Library
The GNU C Library version 2.33 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 C11 and POSIX.1-2017. It is also
internationalized and has one of the most complete
internationalization interfaces known.
The GNU C Library webpage is at http://www.gnu.org/software/libc/
Packages for the 2.33 release may be downloaded from:
The mirror list is at http://www.gnu.org/order/ftp.html
NEWS for version 2.33
Major new features:
* The dynamic linker accepts the --list-tunables argument which prints
all the supported tunables. This option is disable if glibc is
configured with tunables disabled (--enable-tunables=no).
* The dynamic linker accepts the --argv0 argument and provides opportunity
to change argv string.
* The dynamic linker loads optimized implementations of shared objects
from subdirectories under the glibc-hwcaps directory on the library
search path if the system's capabilities meet the requirements for
that subdirectory. Initially supported subdirectories include
"power9" and "power10" for the powerpc64le-linux-gnu architecture,
"z13", "z14", "z15" for s390x-linux-gnu, and "x86-64-v2", "x86-64-v3",
"x86-64-v4" for x86_64-linux-gnu. In the x86_64-linux-gnu case, the
subdirectory names correspond to the vendor-independent x86-64
microarchitecture levels defined in the x86-64 psABI supplement.
* The new --help option of the dynamic linker provides usage and
information and library search path diagnostics.
* The mallinfo2 function is added to report statistics as per mallinfo,
but with larger field widths to accurately report values that are
larger than fit in an integer.
* Add <sys/platform/x86.h> to provide query macros for x86 CPU features.
* Support for the RISC-V ISA running on Linux has been expanded to run on
32-bit hardware. This is supported for the following ISA and ABI pairs:
- rv32imac ilp32
- rv32imafdc ilp32
- rv32imafdc ilp32d
The 32-bit RISC-V port requires at least Linux 5.4, GCC 7.1 and binutils
* A new fortification level _FORTIFY_SOURCE=3 is available. At this level,
glibc may use additional checks that may have an additional performance
overhead. At present these checks are available only on LLVM 9 and later.
The latest GCC available at this time (10.2) does not support this level of
Deprecated and removed features, and other changes affecting compatibility:
* The mallinfo function is marked deprecated. Callers should call
* When dlopen is used in statically linked programs, alternative library
implementations from HWCAP subdirectories are no longer loaded.
Instead, the default implementation is used.
* The deprecated <sys/vtimes.h> header and the function vtimes have been
removed. To support old binaries, the vtimes function continues to exist
as a compatibility symbol. Applications should use the getrlimit or
* Following a change in the tzdata 2018a release upstream, the zdump
program is now installed in the /usr/bin subdirectory. Previously,
the /usr/sbin subdirectory was used.
* On s390(x), the type float_t is now derived from the macro
__FLT_EVAL_METHOD__ that is defined by the compiler, instead of being
hardcoded to double. This does not affect the ABI of any libraries
that are part of the GNU C Library, but may affect the ABI of other
libraries that use this type in their interfaces. The new definition
improves consistency with compiler behavior in many scenarios.
* A future version of glibc will stop loading shared objects from the
"tls" subdirectories on the library search path, the subdirectory that
corresponds to the AT_PLATFORM system name, and also stop employing
the legacy AT_HWCAP search mechanism. Applications should switch to
the new glibc-hwcaps mechanism instead; if they do not do that, only
the baseline version (directly from the search path directory) will be
Changes to build and runtime requirements:
* On Linux, the system administrator needs to configure /dev/pts with
the intended access modes for pseudo-terminals. glibc no longer
attemps to adjust permissions of terminal devices. The previous glibc
defaults ("tty" group, user read/write and group write) already
corresponded to what most systems used, so that grantpt did not
perform any adjustments.
* On Linux, the posix_openpt and getpt functions no longer attempt to
use legacy (BSD) pseudo-terminals and assume that if /dev/ptmx exists
(and pseudo-terminals are supported), a devpts file system is mounted
on /dev/pts. Current systems already meet these requirements.
* s390x requires GCC 7.1 or newer. See gcc Bug 98269.
Security related changes:
CVE-2021-3326: An assertion failure during conversion from the
ISO-20220-JP-3 character set using the iconv function has been fixed.
This assertion was triggered by certain valid inputs in which the
converted output contains a combined sequence of two wide characters
crossing a buffer boundary. Reported by Tavis Ormandy.
CVE-2020-27618: An infinite loop has been fixed in the iconv program when
invoked with input containing redundant shift sequences in the IBM1364,
IBM1371, IBM1388, IBM1390, or IBM1399 character sets.
CVE-2020-29562: An assertion failure has been fixed in the iconv function
when invoked with UCS4 input containing an invalid character.
CVE-2019-25013: A buffer overflow has been fixed in the iconv function when
invoked with EUC-KR input containing invalid multibyte input sequences.
The following bugs are resolved with this release:
 libc: realpath portability patches
 dynamic-link: ld.so should allow to change argv
 malloc: 'free' should not set errno
 libc: Linux faccessat implementation can incorrectly ignore
 libc: Use 64-bit readdir() in generic POSIX getcwd()
 libc: Epyc and other current AMD CPUs do not select the
"haswell" platform subdirectory
 dynamic-link: Definition of "haswell" platform is inconsistent
 libc: m68k setjmp() saves incorrect 'a5' register in --enable-
 libc: Make grantpt usable after multi-threaded fork in more
 libc: realpath mishandles EOVERFLOW; stat not needed anyway
 locale: iconv encounters segmentation fault when converting
0x00 0xfe in EUC-KR to UTF-8 (CVE-2019-25013)
 string: undefined reference to `__warn_memset_zero_len' when
changing gnuc version
 libc: glibc parser for /sys/devices/system/cpu/online is
 dynamic-link: ld.so.cache should store meaning of hwcap mask
 libc: s390 bits/hwcap.h out of sync with kernel
 libc: unlockpt fails with ENOTTY for non-ptmx descriptors
 libc: Race in syslog(3) with regards to tag printing.
 libc: Export <cpu-features.h>
 nscd: Inconsistent nscd cache during pruning
 libc: GLRO(dl_x86_cpu_features) may not be intialized
 locale: iconv hangs when converting some invalid inputs from
several IBM character sets (CVE-2020-27618)
 libc: realpath cyclically call __alloca(path_max) to consume
too much stack space
 manual: invalid documented return type for strerrorname_np(),
strerrordesc_np(), sigdescr_np(), sigabbrev_np()
 libc: Namespace violation in stdio.h and sys/stat.h if build
 locale: bind_textdomain_codeset doesn't accept //TRANSLIT
 time: [2.33 Regression] FAIL: nptl/tst-join14
 math: libm.so 2.32 SIGILL in pow() due to FMA4 instruction on
 dynamic-link: CPU_FEATURE_USABLE_P should be more conservative
 libc: mtx_init allows type set to "mtx_recursive" only
 string: strerrorname_np does not return the documented value
 libc: pointer arithmetic overflows in realpath
 network: Transaction ID collisions cause slow DNS lookups in
 libc: [2.33 Regression] pselect is broken on x32
 libc: powerpc: libc segfaults when LD_PRELOADed with libgcc
 glob: fnmatch with collating symbols results in segmentation
 libc: [2.33 Regression] CET is disabled
 libc: 32-bit shmctl(IPC_INFO) crashes when shminfo struct is
at the end of a memory mapping
 libc: semctl SEM_STAT_ANY fails to pass the buffer specified
by the caller to the kernel
 libc: msgctl IPC_INFO and MSG_INFO return garbage
 build: [-Werror=array-parameter=] due to different
declarations for __sigsetjmp
 libc: mkstemp is likely to fail on systems with non-stricly-
 stdio: printf should handle non-normal x86 long double numbers
 build: -Warray-parameter instances building with GCC 11
 build: -Warray-bounds instances building with GCC 11
 stdio: Aliasing violation in __vfscanf_internal
 nptl: Use a minimum guard size of 64 KiB on aarch64
 build: GCC warning calling new_composite_name with an array of
 libc: FAIL: misc/tst-sysvshm-linux
 libc: Random FAIL: rt/tst-shm
 libc: Missing O_CLOEXEC in sysconf.c
 dynamic-link: aarch64: variant PCS symbols may be incorrectly
 nptl: pthread_mutex_clocklock with CLOCK_MONOTONIC can fail on
 string: aarch64: string tests may run ifunc variants that are
 libc: Memory leak test failures on Fedora 33
 libc: FAIL: elf/tst-cpu-features-supports with recent trunk:
FSGSBASE/LM/RDRAND check failure
 time: adjtime() with delta == NULL segfaults on armv7 32bit
 libc: aarch64: Missing unwind information in statically linked
 locale: Assertion failure in iconv when converting invalid
 dynamic-link: aarch64: library dependencies are not bti
 libc: sh: Multiple floating point functions defined as stubs
only since 2.31
 nptl: pthread_mutex_timedlock returning EAGAIN after futex is
 dynamic-link: aarch64: BTI mprotect address is not page
 build: libc_freeres_fn build failure with GCC 11
 dynamic-link: ld.so is miscompiled by GCC 11
 dynamic-link: ld.so.cache should have endianness markup
 libc: [alpha] anonymous union in struct stat confuses
 libc: Conformance regression in system(3) (and probably also
 dynamic-link: static pie ifunc resolvers run before hwcap is
 network: Do not reload /etc/nsswitch.conf from chroot
 libc: Unsafe unbounded alloca in addmntent
 dynamic-link: The COMMON_CPUID_INDEX_MAX handshake does not
 string: "rep movsb" performance issue
 libc: alpha: wait4() is unavailable in static linking
 dynamic-link: Incorrect sysdeps/x86/tst-cpu-features-cpuinfo.c
 malloc: deadlock in malloc/tst-malloc-stats-cancellation
 locale: Assertion failure in ISO-2022-JP-3 gconv module
related to combining characters (CVE-2021-3326)
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:
Dmitry V. Levin
John David Anglin
Lucas A. M. Magalhaes
Maciej W. Rozycki
Marc Aurèle La France
Paul E. Murphy
Raoni Fassina Firmino
Raphael M Zinsly
Raphael Moreira Zinsly
Rolf Eike Beer
Tulio Magno Quites Machado Filho
More information about the Libc-announce