Skip to content
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.32 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

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[0] 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
  2.28.

* 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
  fortification.

Deprecated and removed features, and other changes affecting compatibility:

* The mallinfo function is marked deprecated.  Callers should call
  mallinfo2 instead.

* 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
  prlimit.

* 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
  loaded.

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:

  [10635] libc: realpath portability patches
  [16124] dynamic-link: ld.so should allow to change argv[0]
  [17924] malloc: 'free' should not set errno
  [18683] libc: Linux faccessat implementation can incorrectly ignore
    AT_EACCESS
  [22899] libc: Use 64-bit readdir() in generic POSIX getcwd()
  [23249] libc: Epyc and other current AMD CPUs do not select the
    "haswell" platform subdirectory
  [24080] dynamic-link: Definition of "haswell" platform is inconsistent
    with GCC
  [24202] libc: m68k setjmp() saves incorrect 'a5' register in --enable-
    stack-protector=all
  [24941] libc: Make grantpt usable after multi-threaded fork in more
    cases
  [24970] libc: realpath mishandles EOVERFLOW; stat not needed anyway
  [24973] locale: iconv encounters segmentation fault when converting
    0x00 0xfe in EUC-KR to UTF-8 (CVE-2019-25013)
  [25399] string: undefined reference to `__warn_memset_zero_len' when
    changing gnuc version
  [25859] libc: glibc parser for /sys/devices/system/cpu/online is
    incorrect
  [25938] dynamic-link: ld.so.cache should store meaning of hwcap mask
    bits
  [25971] libc: s390 bits/hwcap.h out of sync with kernel
  [26053] libc: unlockpt fails with ENOTTY for non-ptmx descriptors
  [26100] libc: Race in syslog(3) with regards to tag printing.
  [26124] libc: Export <cpu-features.h>
  [26130] nscd: Inconsistent nscd cache during pruning
  [26203] libc: GLRO(dl_x86_cpu_features) may not be intialized
  [26224] locale: iconv hangs when converting some invalid inputs from
    several IBM character sets (CVE-2020-27618)
  [26341] libc: realpath cyclically call __alloca(path_max) to consume
    too much stack space
  [26343] manual: invalid documented return type for strerrorname_np(),
    strerrordesc_np(), sigdescr_np(), sigabbrev_np()
  [26376] libc: Namespace violation in stdio.h and sys/stat.h if build
    with optimization.
  [26383] locale: bind_textdomain_codeset doesn't accept //TRANSLIT
    anymore
  [26394] time: [2.33 Regression] FAIL: nptl/tst-join14
  [26534] math: libm.so 2.32 SIGILL in pow() due to FMA4 instruction on
    non-FMA4 system
  [26552] dynamic-link: CPU_FEATURE_USABLE_P should be more conservative
  [26553] libc: mtx_init allows type set to "mtx_recursive" only
  [26555] string: strerrorname_np does not return the documented value
  [26592] libc: pointer arithmetic overflows in realpath
  [26600] network: Transaction ID collisions cause slow DNS lookups in
    getaddrinfo
  [26606] libc: [2.33 Regression] pselect is broken on x32
  [26615] libc: powerpc: libc segfaults when LD_PRELOADed with libgcc
  [26620] glob: fnmatch with collating symbols results in segmentation
    fault
  [26625] libc: [2.33 Regression] CET is disabled
  [26636] libc: 32-bit shmctl(IPC_INFO) crashes when shminfo struct is
    at the end of a memory mapping
  [26637] libc: semctl SEM_STAT_ANY fails to pass the buffer specified
    by the caller to the kernel
  [26639] libc: msgctl IPC_INFO and MSG_INFO return garbage
  [26647] build: [-Werror=array-parameter=] due to different
    declarations for __sigsetjmp
  [26648] libc: mkstemp is likely to fail on systems with non-stricly-
    monotonic clocks
  [26649] stdio: printf should handle non-normal x86 long double numbers
    gracefully (CVE-2020-29573)
  [26686] build: -Warray-parameter instances building with GCC 11
  [26687] build: -Warray-bounds instances building with GCC 11
  [26690] stdio: Aliasing violation in __vfscanf_internal
  [26691] nptl: Use a minimum guard size of 64 KiB on aarch64
  [26726] build: GCC warning calling new_composite_name with an array of
    one element
  [26736] libc: FAIL: misc/tst-sysvshm-linux
  [26737] libc: Random FAIL: rt/tst-shm
  [26791] libc: Missing O_CLOEXEC in sysconf.c
  [26798] dynamic-link: aarch64: variant PCS symbols may be incorrectly
    lazy bound
  [26801] nptl: pthread_mutex_clocklock with CLOCK_MONOTONIC can fail on
    PI mutexes
  [26818] string: aarch64: string tests may run ifunc variants that are
    not safe
  [26821] libc: Memory leak test failures on Fedora 33
  [26824] libc: FAIL: elf/tst-cpu-features-supports with recent trunk:
    FSGSBASE/LM/RDRAND check failure
  [26833] time: adjtime() with delta == NULL segfaults on armv7 32bit
    platform
  [26853] libc: aarch64: Missing unwind information in statically linked
    startup code
  [26923] locale: Assertion failure in iconv when converting invalid
    UCS4 (CVE-2020-29562)
  [26926] dynamic-link: aarch64: library dependencies are not bti
    protected
  [26932] libc: sh: Multiple floating point functions defined as stubs
    only since 2.31
  [26964] nptl: pthread_mutex_timedlock returning EAGAIN after futex is
    locked
  [26988] dynamic-link: aarch64: BTI mprotect address is not page
    aligned
  [27002] build: libc_freeres_fn build failure with GCC 11
  [27004] dynamic-link: ld.so is miscompiled by GCC 11
  [27008] dynamic-link: ld.so.cache should have endianness markup
  [27042] libc: [alpha] anonymous union in struct stat confuses
    detection logic
  [27053] libc: Conformance regression in system(3) (and probably also
    pclose(3))
  [27072] dynamic-link: static pie ifunc resolvers run before hwcap is
    setup
  [27077] network: Do not reload /etc/nsswitch.conf from chroot
  [27083] libc: Unsafe unbounded alloca in addmntent
  [27104] dynamic-link: The COMMON_CPUID_INDEX_MAX handshake does not
    work
  [27130] string: "rep movsb" performance issue
  [27150] libc: alpha: wait4() is unavailable in static linking
  [27177] dynamic-link:
    GLIBC_TUNABLES=glibc.cpu.x86_ibt=on:glibc.cpu.x86_shstk=on doesn't
    work
  [27222] dynamic-link: Incorrect sysdeps/x86/tst-cpu-features-cpuinfo.c
  [27237] malloc: deadlock in malloc/tst-malloc-stats-cancellation
  [27256] locale: Assertion failure in ISO-2022-JP-3 gconv module
    related to combining characters (CVE-2021-3326)

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

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

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:

Adhemerval Zanella
Alexandra Hájková
Alistair Francis
Andreas Schwab
Anssi Hannula
Arjun Shankar
Benno Schulenberg
Carlos O'Donell
Chen Li
Cooper Qu
Corinna Vinschen
DJ Delorie
Dmitry V. Levin
Fangrui Song
Florian Weimer
Guillaume Gardet
H.J. Lu
Jakub Jelinek
Jangwoong Kim
Jeremie Koenig
Jim Wilson
John David Anglin
John McCabe
Jonathan Wakely
Jonny Grant
Joseph Myers
Lode Willems
Lucas A. M. Magalhaes
Lukasz Majewski
Maciej W. Rozycki
Mao Han
Marc Aurèle La France
Marius Hillenbrand
Mark Wielaard
Martin Liska
Martin Sebor
Matheus Castanho
Matt Turner
Maximilian Krüger
Michael Colavita
Ondřej Hošek
Patrick McGehearty
Patsy Griffin
Paul E. Murphy
Paul Eggert
Paul Zimmermann
Prasanth R
Raoni Fassina Firmino
Raphael M Zinsly
Raphael Moreira Zinsly
Richard Braun
Richard Earnshaw
Rolf Eike Beer
Sajan Karumanchi
Samuel Thibault
Sergei Trofimovich
Shuo Wang
Siddhesh Poyarekar
Stafford Horne
Stefan Liebler
Szabolcs Nagy
Thorsten Kukuk
Tulio Magno Quites Machado Filho
Vincent Chen
Vincent Mihalkovic
Vineet Gupta
W. Hashimoto
Wilco Dijkstra
Xiaoming Ni
Zong Li
liqingqing
Érico Rolim