This is the mail archive of the
mailing list for the GNU libc project.
The GNU C Library version 2.30 is now available
- From: Carlos O'Donell <carlos at redhat dot com>
- To: libc-announce at sourceware dot org
- Date: Thu, 1 Aug 2019 16:12:07 -0400
- Subject: The GNU C Library version 2.30 is now available
The GNU C Library
The GNU C Library version 2.30 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.30 release may be downloaded from:
The mirror list is at http://www.gnu.org/order/ftp.html
NEWS for version 2.30
Major new features:
* Unicode 12.1.0 Support: Character encoding, character type info, and
transliteration tables are all updated to Unicode 12.1.0, using
generator scripts contributed by Mike FABIAN (Red Hat).
* The dynamic linker accepts the --preload argument to preload shared
objects, in addition to the LD_PRELOAD environment variable.
* The twalk_r function has been added. It is similar to the existing
twalk function, but it passes an additional caller-supplied argument
to the callback function.
* On Linux, the getdents64, gettid, and tgkill functions have been added.
* Minguo (Republic of China) calendar support has been added as an
alternative calendar for the following locales: zh_TW, cmn_TW, hak_TW,
* The entry for the new Japanese era has been added for ja_JP locale.
* Memory allocation functions malloc, calloc, realloc, reallocarray, valloc,
pvalloc, memalign, and posix_memalign fail now with total object size
larger than PTRDIFF_MAX. This is to avoid potential undefined behavior with
pointer subtraction within the allocated object, where results might
overflow the ptrdiff_t type.
* The dynamic linker no longer refuses to load objects which reference
versioned symbols whose implementation has moved to a different soname
since the object has been linked. The old error message, symbol
FUNCTION-NAME, version SYMBOL-VERSION not defined in file DSO-NAME with
link time reference, is gone.
* Add new POSIX-proposed pthread_cond_clockwait, pthread_mutex_clocklock,
pthread_rwlock_clockrdlock, pthread_rwlock_clockwrlock and sem_clockwait
functions. These behave similarly to their "timed" equivalents, but also
accept a clockid_t parameter to determine which clock their timeout should
be measured against. All functions allow waiting against CLOCK_MONOTONIC
and CLOCK_REALTIME. The decision of which clock to be used is made at the
time of the wait (unlike with pthread_condattr_setclock, which requires
the clock choice at initialization time).
* On AArch64 the GNU IFUNC resolver call ABI changed: old resolvers still
work, new resolvers can use a second argument which can be extended in
the future, currently it contains the AT_HWCAP2 value.
Deprecated and removed features, and other changes affecting compatibility:
* The copy_file_range function fails with ENOSYS if the kernel does not
support the system call of the same name. Previously, user space
emulation was performed, but its behavior did not match the kernel
behavior, which was deemed too confusing. Applications which use the
copy_file_range function can no longer rely on glibc to provide a fallback
on kernels that do not support the copy_file_range system call, and if
this function returns ENOSYS, they will need to use their own fallback.
Support for copy_file_range for most architectures was added in version
4.5 of the mainline Linux kernel.
* The functions clock_gettime, clock_getres, clock_settime,
clock_getcpuclockid, clock_nanosleep were removed from the librt library
for new applications (on architectures which had them). Instead, the
definitions in libc will be used automatically, which have been available
since glibc 2.17.
* The obsolete and never-implemented XSI STREAMS header files <stropts.h>
and <sys/stropts.h> have been removed.
* Support for the "inet6" option in /etc/resolv.conf and the RES_USE_INET6
resolver flag (deprecated in glibc 2.25) have been removed.
* The obsolete RES_INSECURE1 and RES_INSECURE2 option flags for the DNS stub
resolver have been removed from <resolv.h>.
* With --enable-bind-now, installed programs are now linked with the
* Support for the PowerPC SPE ISA extension (powerpc-*-*gnuspe*
configurations) has been removed, following the deprecation of this
subarchitecture in version 8 of GCC, and its removal in version 9.
* On 32-bit Arm, support for the port-based I/O emulation and the <sys/io.h>
header have been removed.
* The Linux-specific <sys/sysctl.h> header and the sysctl function have been
deprecated and will be removed from a future version of glibc.
Application should directly access /proc instead. For obtaining random
bits, the getentropy function can be used.
Changes to build and runtime requirements:
* GCC 6.2 or later is required to build the GNU C Library.
Older GCC versions and non-GNU compilers are still supported when
compiling programs that use the GNU C Library.
Security related changes:
CVE-2019-7309: x86-64 memcmp used signed Jcc instructions to check
size. For x86-64, memcmp on an object size larger than SSIZE_MAX
has undefined behavior. On x32, the size_t argument may be passed
in the lower 32 bits of the 64-bit RDX register with non-zero upper
32 bits. When it happened with the sign bit of RDX register set,
memcmp gave the wrong result since it treated the size argument as
zero. Reported by H.J. Lu.
CVE-2019-9169: Attempted case-insensitive regular-expression match
via proceed_next_node in posix/regexec.c leads to heap-based buffer
over-read. Reported by Hongxu Chen.
The following bugs are resolved with this release:
 locale: Transliteration Cyrillic -> ASCII fails
 libc: gettid() should have a wrapper
 malloc: mtrace hangs when MALLOC_TRACE is defined
 glob: fnmatch unbounded stack VLA for collating symbols
 localedata: globbing for locale by [[.collating-element.]]
 dynamic-link: pldd does no longer work, enters infinite loop
 malloc: memusagestat is built using system C library
 locale: iconv -c -f ascii with >buffer size worth of input before
invalid input drops valid char
 nptl: libpthread IFUNC resolver for vfork can lead to crash
 locale: Segfault with wide characters and setlocale/fgetwc/UTF-8
 localedata: Afar locales: Fix mon, abmon, and abday
 localedata: The Japanese Era name will be changed on May 1, 2019
 malloc: __malloc_check_init still defined in public header
 nptl: Wrong alignment of TLS variables
 libc: nftw() doesn't return dangling symlink's inode
 malloc: Check the count before calling tcache_get()
 malloc: Missing __attribute_alloc_size__ in many allocation
 localedata: nl_NL missing LC_NUMERIC thousands_sep
 nptl: pthread_rwlock_trywrlock results in hang
 argparse: Missing compat versions of argp_failure and argp_error
for long double = double
 libc: Missing compat versions of err.h and error.h functions for
long double = double
 localedata: Dutch salutations
 libc: riscv64: unterminated call chain in __thread_start
 network: libresolv should use IP_RECVERR/IPV6_RECVERR to avoid
 stdio: puts and putchar ouput to _IO_stdout instead of stdout
 nss: nss_files: get_next_alias calls fgets_unlocked without
checking for NULL.
 regex: regexec buffer read overrun in "grep -i
 libc: Segfaults if 0 returned from la_version
 stdio: Some input functions do not react to stdin assignment
 string: x32 memcmp can treat positive length as 0 (if sign bit in
RDX is set) (CVE-2019-7309)
 nptl: __run_fork_handlers self-deadlocks in malloc/tst-mallocfork2
 libc: Systemtap probes need to use "nr" constraint on 32-bit Arm,
not the default "nor"
 dynamic-link: Dl_serinfo.dls_serpath in dlfcn.h causes UBSAN
false positives, change to modern flexible array
 nptl: pthread_mutex_trylock does not use the correct order of
instructions while maintaining the robust mutex list due to missing
 librt: Non-compatibility symbols for clock_gettime etc. cause
unnecessary librt dependencies
 localedata: Revert first_weekday removal in en_IE locale
 nptl: Use-after-free in Systemtap probe in pthread_join
 nptl: pthread_timedjoin_np should be a cancellation point
 malloc: Check for large bin list corruption when inserting
 stdio: old x86 applications that use legacy libio crash on exit
 dynamic-link: [sparc64] R_SPARC_H34 implementation falls through
 localedata: Missing Minguo calendar support for TW locales
 localedata: Orthographic mistakes in 'day' and 'abday' sections in
tt_RU (Tatar) locale
 localedata: Update locale data to Unicode 12.0.0
 dynamic-link: dlopen should not be able open PIE objects
 build: "Obsolete types detected" with Linux 5.0 headers
 localedata: Orthographic mistakes in 'mon' and 'abmon' sections in
tt_RU (Tatar) locale
 localedata: Add lang_name for tt_RU locale
 locale: Binary locale files are not architecture independent
 time: strptime %Ey mis-parses final year of era
 dynamic-link: __libc_freeres triggers bad free in libdl if dlerror
was not used
 dynamic-link: FAIL: elf/tst-pldd with --enable-hardcoded-path-in-
 malloc: Malloc tunables give tcache assertion failures
 libc: conform/arpa/inet.h failures due to linux kernel 64-bit
 localedata: Update locale data to Unicode 12.1.0
 build: nptl/tst-eintr1 test case can hit task limits on some
kernels and break testing
 build: elf/tst-pldd doesn't work if you install with a --prefix
 build: [GCC 9] error: ‘%s’ directive argument is null
 libc: alpha: compat msgctl uses __IPC_64
 locale: Data race in __wcsmbs_clone_conv
 stdio: Remove codecvt vtables from libio
 math: sysdeps/ieee754/dbl-64/branred.c is slow when compiled with
 localedata: nl_NL LC_MONETARY doesn't match CLDR 35
 stdio: Old binaries which use freopen with default stdio handles
 libc: __ppc_get_timebase_freq() always return 0 when using static
 localedata: szl_PL spelling correction
 nss: nss_db: calling getpwent after endpwent crashes
 nss: endgrent() clobbers errno=ERRNO for 'group: db files' entry
 libc: mmap64 with very large offset broken on MIPS64 n32
 libc: getdents64 type confusion
 dynamic-link: ld.so should not require that a versioned symbol is
always implemented in the same library
 libc: Remove copy_file_range emulation
 malloc: memusagestat is linked against system libpthread
 libc: Partial test suite run builds corrupt test-in-container
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:
Andreas K. Hüttel
Dmitry V. Levin
Gabriel F. T. Gomes
Maciej W. Rozycki
Paul A. Clarke
Tulio Magno Quites Machado Filho